如何在Oracle中查找授予用户的权限和角色?

Abh*_*arg 75 security oracle oracle10g user-accounts

我使用的是Linux,Oracle10g.我创建了一个名为test的用户.并授予create session并为同一用户选择任何字典权限.

我还向同一用户授予了sysdba和sysoper角色.

现在我想显示授予用户的所有权限和角色.我发现以下查询,但它只显示创建会话和选择字典权限.

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;
Run Code Online (Sandbox Code Playgroud)

请帮忙解决问题.

谢谢

小智 67

除了VAV的回答,第一个在我的环境中最有用

select * from USER_ROLE_PRIVS where USERNAME='SAMPLE';
select * from USER_TAB_PRIVS where Grantee = 'SAMPLE';
select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';
Run Code Online (Sandbox Code Playgroud)

  • +1非常完整.放入"user"而不是sample来获取当前登录用户的信息 (6认同)
  • 注意:如果您使用的是`dba_XXX_privs`,则列名是`grantee`而不是`username`。 (2认同)

VAV*_*VAV 54

请看http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665

检查USER_SYS_PRIVS,USER_TAB_PRIVS,USER_ROLE_PRIVS表.

  • 换句话说,做那些表`SELECT*FROM`.让我们不要懒惰......当我看不到代码时,我会感到沮丧.不是每个人都可以阅读您的想法以获得确切的语法,并且可以移动文档链接. (31认同)
  • 对于懒惰的那些:`SELECT*FROM USER_SYS_PRIVS;``SELECT*FROM USER_TAB_PRIVS;``SELECT*FROM USER_ROLE_PRIVS;` (12认同)

Moc*_*ing 48

没有其他答案对我有用,所以我写了自己的解决方案:

截至Oracle 11g.

用所需的用户名替换USER

授予的角色:

SELECT * 
  FROM DBA_ROLE_PRIVS 
 WHERE GRANTEE = 'USER';
Run Code Online (Sandbox Code Playgroud)

直接授予用户的权限:

SELECT * 
  FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';
Run Code Online (Sandbox Code Playgroud)

授予用户角色的权限:

SELECT * 
  FROM DBA_TAB_PRIVS  
 WHERE GRANTEE IN (SELECT granted_role 
                     FROM DBA_ROLE_PRIVS 
                    WHERE GRANTEE = 'USER');
Run Code Online (Sandbox Code Playgroud)

授予系统权限:

SELECT * 
  FROM DBA_SYS_PRIVS 
 WHERE GRANTEE = 'USER';
Run Code Online (Sandbox Code Playgroud)

如果要查找当前连接的用户,可以使用USER替换表名中的DBA并删除WHERE子句.

  • 这是最好的答案。谢谢。 (2认同)

upo*_*pog 10

通过某些角色向用户提供IF权限,然后可以使用SQL以下

select * from ROLE_ROLE_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_TAB_PRIVS  where ROLE = 'ROLE_NAME';
select * from ROLE_SYS_PRIVS  where ROLE = 'ROLE_NAME';
Run Code Online (Sandbox Code Playgroud)


小智 8

结合之前的建议来确定您的个人权限(即'USER'权限),然后使用:

-- your permissions
select * from USER_ROLE_PRIVS where USERNAME= USER;
select * from USER_TAB_PRIVS where Grantee = USER;
select * from USER_SYS_PRIVS where USERNAME = USER;

-- granted role permissions
select * from ROLE_ROLE_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_TAB_PRIVS  where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_SYS_PRIVS  where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
Run Code Online (Sandbox Code Playgroud)

  • 优秀!这应该是真正的答案! (2认同)