表dba_role_privs和表dba_users的区别 (我个人理解)
首先:dba_role_privs 包含了 role_role_privs.
SQL> desc dba_role_privs;
名称 是否为空? 类型
-------------------------- -------- ----------------------------
GRANTEE VARCHAR2(30) //接受角色的用户或角色的名字
GRANTED_ROLE NOT NULL VARCHAR2(30) //对用户授予的角色名
ADMIN_OPTION VARCHAR2(3) //指出授予角色时是否用了ADMIN选项。
DEFAULT_ROLE VARCHAR2(3)//表明是否这个角色是被指定为缺省角色。
//DBA_ROLE_PRIVS 描述哪些“用户或角色(GRANTEE)”被授予了哪些角色(GRANTED_ROLE)
SQL> desc role_role_privs;
名称 是否为空? 类型
---------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
//role_role_privs 描述哪些“角色(ROLE)”被授予了哪些角色(GRANTED_ROLE)
SQL> select * from role_role_privs;
ROLE GRANTED_ROLE ADM
------------------------------ ------------------------------ ---
DBA SCHEDULER_ADMIN YES
DBA OLAP_DBA NO
DBA EXECUTE_CATALOG_ROLE YES
一个角色(role)可以被赋予另一个角色(GRANTED_ROLE )(GRANTED_ROLE 英文含义是被赋予的角色)
比如上边的例子:通过role_role_privs表可以看到,DBA这个角色又被赋予了另外三个个角色(SCHEDULER_ADMIN、OLAP_DBA、EXECUTE_CATALOG_ROLE)
ROLE中的role只是角色名,Role 和User一样,是实实在在存在在Oracle里的物理对象。
DBA_ROLE_PRIVS 视图中包含数据库中所拥有的所有角色
ROLE_SYS_PRIVS 视图中可以查看某个角色所包含的权限
官方文档的解释如下:
DBA_ROLE_PRIVS describes the roles granted to all users and roles in the database.
ROLE_SYS_PRIVS describes system privileges granted to roles. Information is provided only about roles to which the user has access.