与角色相关的视图包括 ROLE_ROLE_PRIVS, ROLE_SYS_PRIVS, ROLE_TAB_PRIVS, DBA_ROLES, DBA_ROLE_PRIVS,SESSION_ROLES这六个视图。
1.ROLE_ROLE_PRIVS:表示角色授予其他角色,主要提供来自role的role的权限信息
SQL> create role superxxx;
角色已创建。
SQL> grant dba to superxxx;
授权成功。
SQL> select * from role_role_privs where granted_role='DBA';
ROLE GRANTED_ROLE ADM
------------------------------ ------------------------------ ---
SUPERXXX DBA NO
在这里可以查看到SUPERXXX被授予了DBA角色。在DBA_ROLE_PRIVS视图中也可以查到这条信息
SQL> select * from dba_role_privs where GRANTEE='SUPERXXX';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
SUPERXXX DBA NO YES
SQL> desc dba_role_privs;
名称 是否为空? 类型
----------------------------------------- -------- -------------
GRANTEE VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
DEFAULT_ROLE VARCHAR2(3)
SQL> desc role_role_privs;
名称 是否为空? 类型
----------------------------------------- -------- -------------
ROLE NOT NULL VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
grantee可能是用户名或角色,而role只是角色名,所以dba_role_privs包含了role_role_privs的信息
select role,granted_role,admin_option from role_role_privs
intersect
select grantee,granted_role,admin_option from dba_role_privs;
和select * from role_role_privs;执行所产生的记录是一样的。
再进一步,执行set autotrace traceonly explain,查询role_role_privs,会发现有SYS."X$KZDOS"这张表(Represent an os role as defined by the operating system)
2.ROLE_SYS_PRIVS:描述了角色的系统权限,它可以查看某个角色所包含的系统权限
SQL> select * from role_sys_privs where role='SUPERXXX';
ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SUPERXXX UNLIMITED TABLESPACE NO
3.ROLE_TAB_PRIVS:描述了角色的对象权限,可以查看某个表、视图等
SQL> conn xxx/owen@orcl
已连接。
SQL> select count(*) from scott.emp;
select count(*) from scott.emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> conn system/owen@orcl
已连接。
SQL> grant select on scott.emp to superxxx;
授权成功。
SQL> CONN XXX/owen@orcl
已连接。
SQL> select count(*) from scott.emp;
COUNT(*)
----------
14
SQL> select * from role_tab_privs where role='SUPERXXX';
ROLE OWNER TABLE_NAME COLUMN_NAME PRIVILEGE GRA
------------------------------ ---------- --------------- ------------------------------ ---------------------------------------- -
SUPERXXX SCOTT EMP SELECT NO
已选择 1 行。
4.DBA_ROLES:显示在数据库里所有的角色
SQL> desc dba_roles;
名称 是否为空? 类型
----------------------------- -------- ---------------
ROLE NOT NULL VARCHAR2(30)
PASSWORD_REQUIRED VARCHAR2(8)
AUTHENTICATION_TYPE VARCHAR2(11)
PASSWORD表示创建角色时是否有密码,当使用了以下AUTHENTICATION_TYPE模式时,该列被废弃。AUTHENTICATION_TYPE指示身份的验证机制,分为
-
NONE
-CREATE ROLE
role1
;
-
EXTERNAL
-CREATE ROLE
role2
IDENTIFIED EXTERNALLY;
-
GLOBAL
-CREATE ROLE
role3
IDENTIFIED GLOBALLY;
-
APPLICATION
-CREATE ROLE
role4
IDENTIFIED USING
schema
.
package
;
-
PASSWORD
-CREATE ROLE
role5
IDENTIFIED BY
role5
;
ROLE PASSWORD AUTHENTICAT
------------------------------ -------- -----------
SUPERXXX YES PASSWORD
已选择 1 行。
5.DBA_ROLE_PRIVS:描述了角色与被授予角色和用户之间的关系
6.SESSION_ROLES:显示当前会话中用户所拥有的角色
SQL> conn xxx/owen@orcl
已连接。
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
已选择2行。