- 相關(guān)推薦
ORACLE數據庫中的權限和角色
Oracle數據庫是一種大型關(guān)系型的數據庫,我們知道當使用一個(gè)數據庫時(shí),僅僅能夠控制哪些人可以訪(fǎng)問(wèn)數據庫,哪些人不能訪(fǎng)問(wèn)數據庫是無(wú)法滿(mǎn)足數據庫訪(fǎng)問(wèn)控制的。DBA需要通過(guò)一種機制來(lái)限制用戶(hù)可以做什么,不能做什么,這在Oracle中可以通過(guò)為用戶(hù)設置權限來(lái)實(shí)現。權限就是用戶(hù)可以執行某種操作的權利。而角色是為了方便DBA管理權限而引入的一個(gè)概念,它實(shí)際上是一個(gè)命名的權限集合。
1 權限
Oracle數據庫有兩種途徑獲得權限,它們分別為:
、 DBA直接向用戶(hù)授予權限。
、 DBA將權限授予角色(一個(gè)命名的包含多個(gè)權限的集合),然后再將角色授予一個(gè)或多個(gè)用戶(hù)。
使用角色能夠更加方便和高效地對權限進(jìn)行管理,所以DBA應該習慣于使用角色向用戶(hù)進(jìn)行授予權限,而不是直接向用戶(hù)授予權限。
Oracle中的權限可以分為兩類(lèi):
•系統權限
•對象權限
1.1 系統權限
系統權限是在數據庫中執行某種操作,或者針對某一類(lèi)的對象執行某種操作的權利。例如,在數據庫中創(chuàng )建表空間的權利,或者在任何模式中創(chuàng )建表的權利,這些都屬于系統權限。在Oracle9i中一共提供了60多種權限。
系統權限的權利很大,通常情況下:
、 只有DBA才應當擁有alter database系統權限,該權限允許用戶(hù)對數據庫物理結構和可用性進(jìn)行修改。
、 應用程序開(kāi)發(fā)者一般應該擁有Create Table、Create View和Create Type等系統權限,用于創(chuàng )建支持前端的數據庫模式對象。
、 普通用戶(hù)一般只具有Create session系統權限(可以通過(guò)Connection角色獲得),只有Create Session系統權限的用戶(hù)才能連接到數據庫
、 只有具有Grant Any PRivilege系統權限用戶(hù),或者獲取了具有With Admin Option選項的系統權限的用戶(hù),才能夠成為其它用戶(hù)授予權限。
1.2對象權限
對象權限是針對某個(gè)特定的模式對象執行操作的權利。只能針對模式對象來(lái)設置和管理對象權限。
對于模式對象:表、視圖、序列、存儲過(guò)程、存儲函數、包都可以對象設置權限。不同類(lèi)型模式對象具有不同的對象權限。比如,表、視圖等對象具有查詢(xún)(Select)、修改(Update)、刪除(Delete)等對象權限,而存儲過(guò)程、存儲函數等對象則具有執行(Execute)等對象權限。
但是并不是所有的模式對象都可以設置對象權限。比如簇、索引、觸發(fā)器以及數據庫鏈接等模式就不具有對象權限。這些模式對象的訪(fǎng)問(wèn)控制是通過(guò)相應的系統權限來(lái)實(shí)現的,比如,要對索引進(jìn)行修改,必須擁有Alter Any Index系統權限。
用戶(hù)自動(dòng)擁有他的模式中所有對象的全部對象權限,他可以將這些對象權限授予其他的用戶(hù)或角色。比如,Test1用戶(hù)創(chuàng )建了一個(gè)表Table1,在沒(méi)有授權的情況下,用戶(hù)Test2不能查詢(xún)、修改、刪除這個(gè)表。如果Test1將ETP表的Select對象權限授予了Test2,則該用戶(hù)就可以查詢(xún)Table1表了。如果在為其它用戶(hù)授予對象權限時(shí)用了With Grant Option選項,被授予權限的用戶(hù)還可以將這個(gè)權限在授予其他用戶(hù)。
2 角色
2.1角色的概念
角色就是多個(gè)相關(guān)權限的命名集合。通過(guò)角色來(lái)進(jìn)行對用戶(hù)授予權限,可以大大簡(jiǎn)化DBA的工作量。比如,處于統一部門(mén)中的30多個(gè)用戶(hù)都需要訪(fǎng)問(wèn)數據庫中的一系列表,DBA可以將這些表的中合適的對象權限授予一個(gè)角色,然后在把這個(gè)角色授予這些用戶(hù),這樣進(jìn)行操作要比為沒(méi)有用戶(hù)進(jìn)行授權要便捷多了,而且要對這些用戶(hù)的權限進(jìn)行統一修改,只需要修改角色的權限即可。
2.2角色的優(yōu)點(diǎn)
通過(guò)角色為用戶(hù)授予權限,而不是直接向各個(gè)用戶(hù)授權,具有以下優(yōu)點(diǎn):
•簡(jiǎn)化權限管理 DBA將用戶(hù)群分類(lèi),然后為每一類(lèi)用戶(hù)創(chuàng )建角色,并將該角色授予這類(lèi)用戶(hù)所需要的權限,最后在將改角色授予該類(lèi)中的各個(gè)用戶(hù)。這樣不僅簡(jiǎn)化了授權操作,而且當這類(lèi)用戶(hù)的權限需求發(fā)生改變時(shí),只需要把角色的權限進(jìn)行改動(dòng),而不必修改每一位用戶(hù)的權限。
•動(dòng)態(tài)權限管理 角色可以被禁用或激活。當角色被禁止使用時(shí),擁有該角色的用戶(hù)不再擁有授予改角色的權限了。這樣就可以對多個(gè)用戶(hù)的權限進(jìn)行動(dòng)態(tài)控制了。
•靈活的編程能力 角色是存儲在數據字典中的,并且可以為角色設置口令。這樣就能夠在應用程序中對角色進(jìn)行控制。比如禁用或者激活等操作。
下面以Oracle9i為例,給出具體的實(shí)現用戶(hù)授權:
(1)設定各種角色,及其權限
CREATE ROLE checkerrole DENTIFIEDBYxm361001;
CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;
GRANT SELECT,UPDATE ON
account.paytable TO checkerrole;
GRANT CONNECT TO defaultrole;
(2)創(chuàng )建用戶(hù)
CREATE USER xiaoli IDENTIFIEDBY xiaoli;
(3)授權
GRANT checkerrole TO xiaoli;
GRANT defaultrole TO xiaoli;
(4)設定用戶(hù)缺省的角色
ALTER USER xiaoli DEFAULTROLE defaultrole;
(5)注冊過(guò)程
CONNECT xiaoli/xiaoli@oracle
此時(shí)用戶(hù)只有其缺省角色的權限。
(6)激活角色
SET ROLE checkerrole IDENTIFIEDBY xm361001;
----操作成功后,xiaoli擁有checkerrole的權限。
----這里的角色和口令是固定的,在應用系統中可以由應用管理人員自行設置則更為方便安全
【ORACLE數據庫中的權限和角色】相關(guān)文章:
Oracle數據庫語(yǔ)句大全10-08
ORACLE數據庫碎片的整理08-18
oracle數據庫基本語(yǔ)句08-21
Oracle數據庫認證層次08-29
Oracle數據庫的基本介紹09-04
Oracle數據庫SQLPLUS介紹10-09
Oracle 數據庫查詢(xún)小技巧10-17
oracle數據庫基礎知識07-26
Oracle數據庫基本知識09-13