一、何爲角色?
角色。角色是一組權限的集合,將角色賦給一個用戶,這個用戶就擁有了這個角色中的所有權限。
二、系統預定義角色
角色所包含的權限可以用以下語句查詢:
sql>select *
from role_sys_privs where role='角色名';
查詢RESOURCE的權限
SQL>
select * from role_sys_privs where role='RESOURCE';
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO
8 rows selected
1.CONNECT, RESOURCE,
DBA
這些預定義角色主要是爲了向後兼容。其主要是用於數據庫管理。oracle建議用戶自己設計數據庫管理和安全的權限規劃,而不要簡單的使用這些預定角色。將來的版本中這些角色可能不會作爲預定義角色。
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
這些角色主要用於訪問數據字典視圖和包。
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
這兩個角色用於數據導入導出工具的使用。
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個角色用於oracle高級查詢功能。
5.SNMPAGENT
用於oracle enterprise manager和Intelligent Agent
6.RECOVERY_CATALOG_OWNER
用於創建擁有恢復庫的用戶。
三、建立和使用角色
建立角色使用CREATE ROLE語句,他的語法如下:
CREATE ROLE role_name IDENTIFIED BY password CREATE ROLE role_name IDENTIFIED EXTERNALLY CREATE ROLE role_name IDENTIFIED GLOBALLY |
缺省情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY 子句建立,那麼角色不會自動響應,必須用SET ROLE激活。
SET ROLE role_name IDENTIFIED BY password |
GRANT ROLE(或system privilege) TO user(role,Public) WITH ADMIN OPTION(可選) |
對象權限被授予 WITH GRANT OPTION,可以傳遞.
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
刪除角色
sql>drop role role1;
四、角色相關的視圖
一. 概述
與權限,角色相關的視圖大概有下面這些:
DBA_SYS_PRIVS: 查詢某個用戶所擁有的系統權限
USER_SYS_PRIVS: 當前用戶所擁有的系統權限
SESSION_PRIVS: 當前用戶所擁有的全部權限
ROLE_SYS_PRIVS: 某個角色所擁有的系統權限
注意: 要以SYS用戶登陸查詢這個視圖,否則返回空.
ROLE_ROLE_PRIVS: 當前角色被賦予的角色
SESSION_ROLES: 當前用戶被激活的角色
USER_ROLE_PRIVS: 當前用戶被授予的角色
另外還有針對表的訪問權限的視圖:
TABLE_PRIVILEGES
ALL_TAB_PRIVS
ROLE_TAB_PRIVS: 某個角色被賦予的相關表的權限
...
二. Examples
1. 查詢當前用戶所擁有的權限
Select * from session_privs;
2. 查詢某個用戶被賦予的系統權限.
可以有多種方式
Select * from user_sys_privs;
或者: select * from DBA_SYS_PRIVS where grantee='XXX'
(需要當前用戶擁有DBA角色)
3. 查詢當前用戶被授予的角色:
1. Select * from SESSION_ROLES order by ROLE
說明: 這個查詢會返回當前用戶所被授予的全部角色, 其中包括嵌套授權的
角色. 例如將DBA角色授予了一個用戶,DBA角色已經被授予的角色(例如
exp_full_database 和 imp_full_database)也會被查詢出來
2. Select * from USER_ROLE_PRIVS
4. 查詢某一角色被賦予的系統權限
Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role
輸入 role='CONNECT'
輸出:
PRIVILEGE
--------------------
ALTER SESSION
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
5. 查詢當前角色被授予的角色
Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE
輸入 role= 'DBA'
輸出:
GRANTED_ROLE
----------------------
DELETE_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
PLUSTRACE
SELECT_CATALOG_ROLE
說明: PLUSTRACE這個角色是用於執行SQL AUTO TRACE的, 通過執行 $ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成這個角色.