如何在Oracle中显示用户的所有权限?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

有人能告诉我如何在sql-console中显示特定用户的所有权限/规则吗?

提问于
用户回答回答于

你可以尝试下面的观点。

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

DBA和其他高级用户可以使用DBA_这些相同视图的版本查找授予其他用户的权限。它们在文档中涵盖。

这些视图仅显示直接授予用户的权限。查找所有权限(包括通过角色间接授予的权限)需要更复杂的递归SQL语句:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;
用户回答回答于

用户可以被授予在系统中可见的系统权限DBA_SYS_PRIVS。他们可以被授予可见的对象权限DBA_TAB_PRIVS。并且他们可以被授予在角色中可见的DBA_ROLE_PRIVS角色(角色可以是默认的或非默认的,并且也可以要求密码,所以仅仅因为用户已被授予角色并不意味着用户可以必须使用他的权限通过默认角色获取)。但是,这些角色可以反过来,被授予系统权限,对象权限,而其他角色可以通过查看查看ROLE_SYS_PRIVSROLE_TAB_PRIVSROLE_ROLE_PRIVS

扫码关注云+社区