數據安全性是指保護數據以防止非法的使用避免造成數據有意或無意的丟失洩露或破壞由於數據庫系統中集中存放有大量的數據這些數據又為眾多用戶所共享所以安全約束是一個極為突出的問題
Oracle數據庫系統在實現數據庫安全性管理方面采取的基本措施有
通過驗證用戶名稱和口令防止非Oracle用戶注冊到Oracle數據庫對數據庫進行非法存取操作
授予用戶一定的權限例如connectresource等限制用戶操縱數據庫的權力
授予用戶對數據庫實體(如表表空間過程等)的存取執行權限阻止用戶訪問非授權數據
提供數據庫實體存取審計機制使數據庫管理員可以監視數據庫中數據的存取情況和系統資源的使用情況
采用視圖機制限制存取基表的行和列集合
在實際應用中許多系統往往采用假用戶(即非數據庫用戶)身份來管理而真實用戶的身份和登錄口令就隱藏在應用系統中或經過各種壓縮加密等處理的配置文件中但這樣往往留下隱患只要從分析應用程序入手最終會分析出系統使用的數據庫用戶和口令那麼其安全性也就消失了另一方面系統代碼是程序員寫出來的如果程序員有破壞意圖這種模式沒有一絲的安全因為他通過自己掌握的代碼不經分析就輕而易舉的獲得登錄用的數據庫用戶和口令
而采用真實數據庫用戶存在著權限分配上的難度特別是用戶數和應用表數都很多時這時必然要使用角色來管理應用權限的分配當然不能直接將權限或角色直接分配給用戶否則用戶可以不同過應用系統而采用SQL*PLUS等前端工具進入系統進行一些沒有經過應用系統檢查的操作產生的結果可能不符合應用邏輯
我們在實踐中發現可以采用另一種方式利用角色功能來防止上面出現的安全漏洞在這種方式下用戶采用自己的標識和口令注冊但在未得到授權的角色前是沒有操縱數據庫的任何權限而授權用戶使用的角色是埋在應用程序中的只有應用程序才知道角色的名稱和口令從而激活角色使用戶擁有相應的權限在應用系統之外用戶可以連接到Oracle但沒有激活相應的角色他是不能做任何事情的而開發人員不知道用戶的標識和口令他沒有辦法登錄到Oracle即使他能夠推算出角色的標識和口令
下面根據一個例子給出具體的實現過程
我們假設用戶xiaoli在工作中能夠對工資表accountpaytable(account是表paytable的擁有者)有查詢和更新的權限而這些權限我們不直接授予xiaoli而是構造一個角色(比如考勤員checkerrole)這個角色恰好適合於xiaoli再將角色授予xiaoli但角色在激活時需要口令該口令不對xiaoli公開每個用戶需要一個缺省的角色是用戶連接到Oracle時的缺省角色這個角色只有connect權限我們假為defaultrole
下面給出具體的操作SQL
()設定各種角色及其權限
CREATE ROLE checkerrole IDENTIFIEDBYxm;
CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;
GRANTSELECTUPDATEONaccountpaytableTOcheckerrole;
GRANTCONNECTTOdefaultrole;
(
)創建用戶
CREATEUSERxiaoliIDENTIFIEDBYxiaoli;
(
)授權
GRANTcheckerroleTOxiaoli;
GRANTdefaultroleTOxiaoli;
(
)設定用戶缺省的角色
ALTERUSERxiaoliDEFAULTROLEdefaultrole;
(
)注冊過程
CONNECTxiaoli/xiaoli@Oracle
此時用戶只有其缺省角色的權限
()激活角色
SETROLEcheckerroleIDENTIFIEDBYxm;
操作成功後
xiaoli擁有checkerrole的權限
這裡的角色和口令是固定的
在應用系統中可以由應用管理人員自行設置則更為方便安全
From:http://tw.wingwit.com/Article/program/SQL/201311/16394.html