Oracle數據庫是一種大型關系型的數據庫我們知道當使用一個數據庫時僅僅能夠控制哪些人可以訪問數據庫哪些人不能訪問數據庫是無法滿足數據庫訪問控制的DBA需要通過一種機制來限制用戶可以做什麼不能做什麼這在Oracle中可以通過為用戶設置權限來實現權限就是用戶可以執行某種操作的權利而角色是為了方便DBA管理權限而引入的一個概念它實際上是一個命名的權限集合
權限
Oracle數據庫有兩種途徑獲得權限它們分別為
① DBA直接向用戶授予權限
② DBA將權限授予角色(一個命名的包含多個權限的集合)然後再將角色授予一個或多個用戶
使用角色能夠更加方便和高效地對權限進行管理所以DBA應該習慣於使用角色向用戶進行授予權限而不是直接向用戶授予權限
Oracle中的權限可以分為兩類
?系統權限
?對象權限
系統權限
系統權限是在數據庫中執行某種操作或者針對某一類的對象執行某種操作的權利例如在數據庫中創建表空間的權利或者在任何模式中創建表的權利這些都屬於系統權限在Oraclei中一共提供了多種權限
系統權限的權利很大通常情況下
① 只有DBA才應當擁有alter database系統權限該權限允許用戶對數據庫物理結構和可用性進行修改
② 應用程序開發者一般應該擁有Create TableCreate View和Create Type等系統權限用於創建支持前端的數據庫模式對象
③ 普通用戶一般只具有Create session系統權限(可以通過Connection角色獲得)只有Create Session系統權限的用戶才能連接到數據庫
④ 只有具有Grant Any PRivilege系統權限用戶或者獲取了具有With Admin Option選項的系統權限的用戶才能夠成為其它用戶授予權限
對象權限
對象權限是針對某個特定的模式對象執行操作的權利只能針對模式對象來設置和管理對象權限
對於模式對象表視圖序列存儲過程存儲函數包都可以對象設置權限不同類型模式對象具有不同的對象權限比如表視圖等對象具有查詢(Select)修改(Update)刪除(Delete)等對象權限而存儲過程存儲函數等對象則具有執行(Execute)等對象權限
但是並不是所有的模式對象都可以設置對象權限比如簇索引觸發器以及數據庫鏈接等模式就不具有對象權限這些模式對象的訪問控制是通過相應的系統權限來實現的比如要對索引進行修改必須擁有Alter Any Index系統權限
用戶自動擁有他的模式中所有對象的全部對象權限他可以將這些對象權限授予其他的用戶或角色比如Test用戶創建了一個表Table在沒有授權的情況下用戶Test不能查詢修改刪除這個表如果Test將ETP表的Select對象權限授予了Test則該用戶就可以查詢 Table表了如果在為其它用戶授予對象權限時用了With Grant Option選項被授予權限的用戶還可以將這個權限在授予其他用戶
角色
角色的概念
角色就是多個相關權限的命名集合通過角色來進行對用戶授予權限可以大大簡化DBA的工作量比如處於統一部門中的多個用戶都需要訪問數據庫中的一系列表DBA可以將這些表的中合適的對象權限授予一個角色然後在把這個角色授予這些用戶這樣進行操作要比為沒有用戶進行授權要便捷多了而且要對這些用戶的權限進行統一修改只需要修改角色的權限即可
角色的優點
通過角色為用戶授予權限而不是直接向各個用戶授權具有以下優點
?簡化權限管理 DBA將用戶群分類然後為每一類用戶創建角色並將該角色授予這類用戶所需要的權限最後在將改角色授予該類中的各個用戶這樣不僅簡化了授權操作而且當這類用戶的權限需求發生改變時只需要把角色的權限進行改動而不必修改每一位用戶的權限
?動態權限管理 角色可以被禁用或激活當角色被禁止使用時擁有該角色的用戶不再擁有授予改角色的權限了這樣就可以對多個用戶的權限進行動態控制了
?靈活的編程能力 角色是存儲在數據字典中的並且可以為角色設置口令這樣就能夠在應用程序中對角色進行控制比如禁用或者激活等操作
下面以Oraclei為例給出具體的實現用戶授權
()設定各種角色及其權限
CREATE ROLE checkerrole DENTIFIEDBYxm;
CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;
GRANT SELECTUPDATE ON
accountpaytable TO checkerrole;
GRANT CONNECT TO defaultrole;
()創建用戶
CREATE USER xiaoli IDENTIFIEDBY xiaoli;
()授權
GRANT checkerrole TO xiaoli;
GRANT defaultrole TO xiaoli;
()設定用戶缺省的角色
ALTER USER xiaoli DEFAULTROLE defaultrole;
()注冊過程
CONNECT xiaoli/xiaoli@oracle
此時用戶只有其缺省角色的權限
()激活角色
SET ROLE checkerrole IDENTIFIEDBY xm;
—操作成功後xiaoli擁有checkerrole的權限
—這裡的角色和口令是固定的在應用系統中可以由應用管理人員自行設置則更為方便安全
From:http://tw.wingwit.com/Article/program/Oracle/201311/18359.html