oracle 角色詳解

一、何爲角色?

角色。角色是一組權限的集合,將角色賦給一個用戶,這個用戶就擁有了這個角色中的所有權限。

二、系統預定義角色

角色所包含的權限可以用以下語句查詢:
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
EXTERNALLY和GLOBALLY類型的角色由操作系統和ORACLE Service server驗證。通常用戶需要權限修改應用程序中使用的表單中的數據,但是隻有在應用程序運行時而不是在使用ad hoc工具時,這種上下文敏感安全可以通過有PASSWORD的角色來實現。當用戶在應用程序內部連結數據庫時,代碼將執行SET ROLE命令,通過安全驗證。所以用戶不需要知道角色的password,也不需要自己輸入SET ROLE命令。

給用戶或者角色授予權限使用GRANT 語句,GRANT語句的語法如下:

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可以生成這個角色.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章