我使用的是Linux,Oracle10g。 我创建了一个名为test的用户。并授予create session并为同一用户选择任何字典权限。
我还向同一用户授予了sysdba和sysoper角色。
现在我想显示授予用户的所有权限和角色。 我找到了以下查询,但它只显示创建会话和选择字典权限。
select privilege
from dba_sys_privs
where grantee='SAMPLE'
order by 1;
请帮助解决问题。
由于
答案 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;