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

时间:2013-02-25 11:55:51

标签: oracle security oracle10g user-accounts

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

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

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

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;

请帮助解决问题。

由于

9 个答案:

答案 0 :(得分:60)

除了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';

答案 1 :(得分:46)

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

检查USER_SYS_PRIVS,USER_TAB_PRIVS,USER_ROLE_PRIVS表格。

答案 2 :(得分:44)

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

从Oracle 11g开始。

将USER替换为所需的用户名

授予角色:

SELECT * 
  FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';

直接授予用户权限:

SELECT * 
  FROM DBA_TAB_PRIVS  
 WHERE GRANTEE IN (SELECT granted_role 
                     FROM DBA_ROLE_PRIVS 
                    WHERE GRANTEE = 'USER');

授予用户角色的权限:

SELECT * 
  FROM DBA_SYS_PRIVS 
 WHERE GRANTEE = 'USER';

授予系统权限:

renderScene(route) {
  return (
    <View style={[route.style]}>
       <route.Page extras={route.props} />
    </View>
  )
}

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

答案 3 :(得分:9)

通过某些角色向用户授予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';

答案 4 :(得分:7)

结合之前的建议来确定您的个人权限(即&#39;用户权限),然后使用:

-- 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);

答案 5 :(得分:1)

SELECT * 
FROM DBA_ROLE_PRIVS 
WHERE UPPER(GRANTEE) LIKE '%XYZ%';

答案 6 :(得分:1)

select * 
from ROLE_TAB_PRIVS 
where role in (
    select granted_role
    from dba_role_privs 
    where granted_role in ('ROLE1','ROLE2')
)

答案 7 :(得分:0)

始终使SQL可重用: - :)

-- ===================================================
-- &role_name will be "enter value for 'role_name'".
-- Date:  2015 NOV 11.

-- sample code:   define role_name=&role_name
-- sample code:   where role like '%&&role_name%'
-- ===================================================


define role_name=&role_name

select * from ROLE_ROLE_PRIVS where ROLE = '&&role_name';
select * from ROLE_SYS_PRIVS  where ROLE = '&&role_name';


select role, privilege,count(*)
 from ROLE_TAB_PRIVS
where ROLE = '&&role_name'
group by role, privilege
order by role, privilege asc
;

答案 8 :(得分:0)

我能理解的唯一可见结果是,首先与要获取权限的用户建立联系,然后与以下查询:

SELECT GRANTEE, PRIVILEGE, TABLE_NAME FROM USER_TAB_PRIVS;