如何在Oracle数据库的DBA_SYS_PRIVS表中标识用户帐户

时间:2016-10-30 01:14:25

标签: database oracle oracle11g audit

我试图在DBA_SYS_PRIVS表中查找具有特定权限的所有用户。该表有一个GRANTEE列,根据Oracle官方网站,GRANTEE列显示" Grantee名称,用户或角色接收授权"。那么我怎么知道GRANTEE是帐户还是角色?例如,在Oracle DB中有一个名为SYS的角色和一个名为SYS的帐户。那么我怎么知道这是一个帐户或角色????

同样在表DBA_TAB_PRIVS中,有一个名为GRANTEE的列。在此表中,GRANTEE列是"授予访问权限的用户的名称"。所以我真的很困惑因为" GRANTEE"列在两个不同的表中表示不同的东西

请帮忙,谢谢你说#ss>

1 个答案:

答案 0 :(得分:1)

Oracle中没有SYS角色。

 SQL> select * from dba_roles where role='SYS';

 no rows selected

实际上,您无法创建与用户名相同名称的角色。

 SQL> create role sys;
 create role sys
        *
 ERROR at line 1:
ORA-01921: role name 'SYS' conflicts with another user or role name

仅获取没有用户名的角色。

SQL>select grantee from dba_sys_privs where grantee not in(select username from all_users);

仅限获得没有角色的用户。

 SQL>select grantee from dba_sys_privs where grantee in(select username from all_users)