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

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

你可以尝试下面这些视图。

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

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

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

 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; 

有各种各样的脚本可以做到这一点,取决于你想得到多么疯狂。 我会亲自使用Pete Finnigan的find_all_privs脚本 。

如果你想自己写,查询变得相当具有挑战性。 用户可以被授予在DBA_SYS_PRIVS中可见的系统权限。 他们可以被授予在DBA_TAB_PRIVS中可见的对象特权。 它们可以被授予在DBA_ROLE_PRIVS中可见的DBA_ROLE_PRIVS (angular色可以是默认的或非默认的,并且也可以要求密码,所以仅仅因为用户已被授予angular色并不意味着用户可以一定使用权限他默认通过angular色获得)。 但是这些angular色又可以被授予系统权限,对象权限和其他angular色,这些angular色可以通过查看ROLE_SYS_PRIVSROLE_TAB_PRIVSROLE_ROLE_PRIVS来查看。 皮特的脚本遍历这些关系,显示最终stream向用户的所有权限。

另一个有用的资源

http://psoug.org/reference/roles.html

  • DBA_SYS_PRIVS
  • DBA_TAB_PRIVS
  • DBA_ROLE_PRIVS

您可以使用下面的代码来获取所有用户的所有权限列表。

 select * from dba_sys_privs