如何在oracle中显示用户的所有权限?
答
您可以尝试下面的这些视图。
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
DBA和其他电力用户可以找到授予其他用户与DBA_
版本的这些相同观点的特权。它们涵盖在documentation中。
这些视图仅向用户显示授予的权限直接。寻找所有特权,包括那些通过角色间接授予,需要更复杂的递归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;
答
有各种脚本左右浮动,将做到这一点取决于你想怎么疯就搞定了。我会亲自使用Pete Finnigan的find_all_privs script。
如果你想自己写,查询变得相当具有挑战性。用户可以被授予在DBA_SYS_PRIVS
中可见的系统权限。他们可以被授予在DBA_TAB_PRIVS
中可见的对象权限。并且他们可以被授予在DBA_ROLE_PRIVS
中可见的角色(角色可以是默认的或非默认的,并且也可以要求密码,所以仅仅因为用户已被授予角色并不意味着用户可以必须使用权限他默认通过角色获得)。但是这些角色又可以被授予系统权限,对象权限和其他角色,可以通过查看ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
和ROLE_ROLE_PRIVS
来查看。皮特的脚本遍历这些关系以显示最终流向用户的所有特权。
答
您可以使用下面的代码来得到所有用户的所有权限列表。
select * from dba_sys_privs
脚本是真棒刚刚检查出来 – 2014-11-05 12:25:47
您需要特权的UTL_FILE包,否则你得到一个错误运行皮特菲尼根的脚本时:“标识符‘UTL_FILE’必须声明为”。您可以通过SQL Developer以sys sys身份连接到sysdba,然后使用以下命令将其运行或授予您对此程序包的执行权限:授予对UTL_FILE的执行权限为; –
Jan
2016-03-23 13:49:43
对于我们这些没有'SYS'特权并且只想看看我们自己帐户的特权的人来说,这个脚本完全没有价值。我无法访问脚本查看的'UTL_FILE',也无法访问'DBA_SYS_PRIVS'和其他'DBA'和'SYS'区域。 – vapcguy 2017-05-05 21:41:57