如何查找Oracle中用户被授予的权限和角色?
问题的出现原因:
其他答案没有解决我的问题,所以我自己编写了解决方案。
解决方法:
在Oracle 11g中,可以使用以下查询语句来查找授予用户的权限和角色:
授予的角色:
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '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';
如果要查找当前连接的用户,可以将表名中的DBA替换为USER,并移除WHERE子句。
这就是最佳答案了。谢谢。
还有一个补充的查询语句,用于查找授予给用户角色所拥有的系统权限:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE IN (SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'DWMGR');
如何在Oracle中查找用户被授予的权限和角色?
在Oracle中,要查找用户被授予的权限和角色,可以执行以下步骤:
1. 查看Oracle官方文档中的链接:http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665。
2. 使用以下查询语句检查USER_SYS_PRIVS、USER_TAB_PRIVS和USER_ROLE_PRIVS表:
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
3. 简单来说,执行SELECT * FROM这些表的查询语句。不要偷懒,我会因为不看到代码而感到沮丧。并非每个人都能准确理解你的语法,而且文档链接可能会发生变动。
对于那些懒惰的人,可以直接执行以下查询语句:
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
如果你是一个像我一样想要查找数据库中"whatever"被授予的角色的人,那么USER_ROLE_PRIVS对你来说不适用,因为根据Oracle文档的说法,"USER_ROLE_PRIVS描述的是当前用户被授予的角色"。相反,你应该在DBA_ROLE_PRIVS视图中查找信息。为什么呢?因为"DBA_ROLE_PRIVS描述的是数据库中所有用户和角色被授予的角色"。
问题的出现原因是用户想要知道在Oracle中授予了哪些特权和角色给一个用户。为了解决这个问题,用户可以执行以下查询语句:
select * from USER_ROLE_PRIVS where USERNAME='SAMPLE'; select * from USER_TAB_PRIVS where Grantee = 'SAMPLE'; select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';
其中,`SAMPLE`是用户的名称,用户可以根据需要将其替换为其他用户名。此外,如果用户想要获取当前已登录用户的信息,可以将`SAMPLE`替换为`user`。
需要注意的是,如果用户使用`dba_XXX_privs`表进行查询,列名将会是`grantee`而不是`username`。