1. 程式人生 > >Oracle 11g R2 DBA 操作指南(16) 角色管理

Oracle 11g R2 DBA 操作指南(16) 角色管理

1.什麼是角色

角色的特點:
1.使用GRANT和REVOKE授予和回收許可權。
2.可以授予任何使用者或角色,但是不能賦予角色自己或迴圈賦予。
3.角色包含系統許可權和物件許可權。
4.允許啟動或關閉賦予使用者的角色。
5.允許使用密碼啟動一個角色。
6.角色名是唯一的,不能和已存在的使用者名稱和角色名相同。
7.角色不被任何人擁有,也不屬於任何模式。

角色的描述儲存在資料字典DBA_ROLES中
select * from dba_roles;

角色的優點:
1.使得許可權的管理更方便,角色賦予多個使用者,使得相同的授權更容易實現,而如果需要修改這些使用者的許可權,只要修改角色就可以修改所有使用者的許可權。
2.動態的許可權管理,一旦角色中的某個許可權給修改,則所有的被授予該角色的使用者都自動獲得修改的許可權,並且立即生效。
3.許可權可以啟用和關閉,使得DBA可以方便地選擇是否使用賦予使用者的角色,臨時地關閉或開啟角色的使用。
4.可以通過作業系統授權角色,即角色可以通過作業系統指令或工具指定角色賦予使用者。
5.提高效能,使用角色減少了資料字典中授權記錄的數量,通過關閉角色使得在語句執行過程中減少了許可權的確認。

2.建立角色
CREATE ROLE role_name [NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY | GLOBALLY | USING package}]

下面詳細介紹各個引數的含義。
1.role_name:角色名字。
2.NOT IDENTIFIED:在啟用角色時不需要密碼驗證。
3.IDENTIFIED:在啟用角色時需要密碼驗證。
4.BY password:設定啟用角色的驗證密碼。
5.USING package:建立應用角色,該角色只能由應用通過授權的package啟用。
6.EXTERNALLY:說明角色在啟用前,必須通過外部服務和作業系統或第三方服務授權。
7.GLOBALLY:當使用SET ROLE啟用角色時,使用者必須通過企業路徑服務授權來使用角色。

建立角色mk_clerk,該角色不需要任何口令標識
create role mk_clerk;

建立角色at_clerk,該角色在啟用時需要口令標識
create role at_clerk identified by rmb;

建立角色manager,該角色使用外部服務來標識
create role manager identified by externanlly;

3.修改角色
角色可以修改,但是Oracle只允許修改它的驗證方法,修改角色的語法格式如下所示。
ALTER ROLE role {NOT IDENTIFIED | IDENTIFIED {BY password | USING package | EXTERNALLY | GLOBALLY}}

引數含義和建立的引數含義相同。

修改角色 mk_clerk的驗證方法為外部標識
alter role mk_clerk identified by externally;

將角色 at_clerk的驗證方法改為不需要任何標識
alter role at_clerk no identified;

將角色 manager的驗證方法改為需要密碼標識
alter role manager identified by rmb;

4.賦予角色許可權
GRANT 許可權|角色 TO 角色名

為角色AT_CLERK賦予許可權
grant create session,select any table,create view to at_clerk;
驗證角色at_clerk的許可權資訊
select * from role_sys_privs where role = 'AT_CLERK';
ADM列為NO,說明該角色不能再將擁有的許可權賦予其他使用者或角色。

將許可權和角色at_clerk授予角色manager
grant create any table,at_clerk to manager;
查詢系統許可權時,只有create any table的許可權。
Oracle提供了一個數據字典DBA_ROLE_PRIVS,
select * from dba_role_privs where granted_role = 'AT_CLERK';

5.賦予使用者角色
GRANT role [,role] …… TO {user | role | public} | {, {user | role | public}}……[WITH ADMIN OPTION]

引數含義如下所示。
1.role:賦予使用者的角色名(如多個角色,則用逗號隔開)
2.user:被賦予角色的使用者(如多個使用者用逗號隔開)
3.public:將角色賦予所有使用者
4.WITH ADMIN OPTION:被賦予該角色的使用者或角色可以繼續將該角色賦予其他使用者或角色。

首先建立兩個使用者clerk 和mymanager
create user clerk identified by cl12#;
create user mymanager identified by my12#;

將角色manager賦予使用者mymanager
grant manager to mymanager with admin option;

檢視mymanager的會話級許可權
select * from session_privs;

在mymanager模式下再將manager賦予使用者clerk
grant manager to clerk;

2016/09/12 21:19
6.預設角色
Oracle允許使用ALTER USER指令修改預設角色。

將角色at_clerk賦予使用者clerk
grant at_clert to clerk;

將角色manager設定為非預設角色
alter user clerk default role all except manager;

驗證角色manager是否為非預設角色
select * from dba_role_privs where grantee = 'CLERK';
DEF列為NO,說明為非預設角色;為YES,說明為預設角色。

將使用者clerk的所有角色設定為非預設角色
alter user clerk default role none;

將使用者clerk的角色at_clerk設定為預設角色
alter user clerk default role at_clerk;

將賦予使用者的所有角色設定為預設角色
alter user clerk default role all;

*在將某個角色設定為使用者預設角色時,如果該角色是通過其他角色授予該使用者的,則該角色不能在DEFAULT ROLE子句中使用。

7.禁止和啟用角色
角色可以禁止和啟用,禁止意味著使用者不再具有該角色賦予的各種許可權,即回收角色具有的許可權,而啟用意味著賦予使用者角色的許可權。

檢視使用者clerk的使用者許可權
select * from session_privs;

禁止使用者的所有角色
set role none;

在禁止所有角色後查詢使用者許可權
select * from session_privs;

啟用使用者clerk的角色at_clerk
set role at_clerk;

啟用角色manager
set role manager;
第1行出現錯誤:
ORA-01979:角色‘MANAGER’的口令缺失或無效
沒有成功啟用,原因是在建立角色manager時,我們使用了驗證方式,即使用密碼驗證。

再次啟用manager,啟用設定了密碼驗證的角色manager
set role manager identified by rmb;

8.回收和刪除角色

回收使用者clerk的at_clerk角色
revoke at_clerk from clerk;
*在回收角色時,可以同時回收多個角色,角色名之間可以使用逗號隔開,也可以同時從幾個使用者回收一個或多個相同的角色,使用者名稱之間使用逗號隔開。

刪除角色at_clerk
drop role at_clerk;

將角色授予所有使用者
grant manager to public;

回收授予public的manager角色
revoke manager from public;

9.Oracle預定義的角色
AQ_ADMINISTRATOR_ROLE:管理QUEUE的管理員角色。
CONNECT:連線資料庫許可權。
DBA:資料庫管理員許可權。
EXP_FULL_DATABASE:匯出資料庫許可權。
IMP_FULL_DATABASE:匯入資料庫 許可權。
JAVADEBUGPRIV:除錯java程式許可權。
MGMT_USER:建立會話和建立觸發器許可權。
OEM_ADVISOR:執行OEM顧問的許可權。
OEM_MONITOR:執行OEM監視的許可權。
OLAP_DBA:執行聯機事務處理時的DBA許可權。
OLAP_USER:執行聯機事務處理時的USER許可權。
RECOVERY_CATALOG_OWNER:恢復資料字典。
RESOURCE:建立一系列資料庫物件的許可權。
SCHEDULER_ADMIN:管理各種排程的許可權,如建立任務、執行程式等。

使用system使用者登入資料庫
connect system/[email protected] as sysdba;

查詢EXP_FULL_DATABASE的許可權資訊
select * 
from role_sys_privs 
where role = 'EXP_FULL_DATABASE'
order by privilege;

2016/09/13 21:51:00