Oracle的權限有兩種:
system privileges:用戶所做的操作會對數據字典造成影響;
object privileges:用戶所做的操作會對數據造成影響;
System Privilege:
大概有200多個系統權限,常用的系統權限包括:
- CREATE SESSION
- RESTRICTED SESSION:當數據庫處於restricted狀態的時候,這些用戶可以進入;
- ALTER DATABASE
- ALTER SYSTEM
- CREATE TABLESPACE
- CREATE TABLE
- GRANT ANY OBJECT PRIVILEGE
- CREATE ANY TABLE
- DROP ANY TABLE
- INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
- SELECT ANY TABLE
GRANTprivilege1,privilege2 TO username;
grantcreate table to scott with admin option;
connectscott/tiger;
grantcreate table to sj;
用戶scott只能在自己的schema中建立表
用戶sj也只能在自己的schema中建立表
如果將scott的該權限收穫,sj的權限將依舊存在;
--查看用戶所擁有的權限,並且看其是否可以繼續授權
select * fromdba_sys_privs where grantee='SJ';
授予any table權限的,任然不能操作SYS表空間中的表;
Object Privileges
可以將select,update,delete,insert,alter,execute等DML操作權限賦給用戶,可以針對表,也可以針對表中的某些列,例:
grantselect on scott.emp to sj;
grant update (order_status) on scott.orders to sj;--在列這個級別分配會造出嚴重的系統負擔;
grant allon scott.regions to sj;
Object Privileges 權限可以級聯收回
revoke select on scott.empfrom sj;-----------通過sj再賦予其他用戶的權限在此語句執行後都將收回;
創建和管理角色
--查看用戶所擁有的角色,並查看是否可以繼續授權
select * fromdba_role_privs where grantee='SJ';
A role isbundle of system and/or object privileges that can be granted and revoked as aunit, and having been granted can betemporarily activated or deactivated with in a session;
CREATE ROLE rolename;
角色的名字不能和現有用戶的用戶名重複,也不能和現有的角色名重複;
createrole hr_junior;
grantcreate session to hr_junior;
grantselect on hr.regions to hr_junior
createrole hr_senior;
granthr_junior to hr_senior with admin option;
grantupdate on hr.regions to hr_senior;
createrole hr_manager;
granthr_senior to hr_manager with admin option;
grant allon hr.regions to hr_manager;
和system privileges權限的收回方式一樣,role的收回也是不能級聯進行的;
預先定義好的角色:
- CONNECT:爲了向後兼容,現在改爲CREATE SESSION,可以創建表
- RESOURCE:爲了向後兼容,可以創建表或存儲過程;並且有UNLIMITED TABLESACPE權限;
- DBA:幾乎具備所有的權限,但是不能啓動和關閉數據庫;
- SELECT_CATALOG_ROLE:數據庫初級管理員最好有這個,它能擁有許多object privileges的權限,但是沒有system privileges的權限,也沒有用戶數據的權限,不能看到用戶數據;
- SCHEDULER_ADMIN:具有管理批量計劃腳本的權限
there isalso a predefined role PUBLIC, which is always granted to every database useraccount;
例:grant select on hr.regions topublic;------通過執行這個語句,系統中的所有用戶都可以獲得對這個表的select權限;
--將一個用戶的默認角色失效
ALTER UESR sj DEFAULT ROLE NONE;--當sj用戶登錄的時候,它沒有任何可用的角色,甚至不能登錄;
grant connect to sj --將登錄角色賦給sj
alter user sj default role connect;---將登錄角色作爲sj的默認角色
SET ROLE rolename;
CTRATEROLE rolename IDENTIFIED USING procedure_name;