考虑这种情况:在数据库中,我有两个用户A和B及其相应的架构。
我想知道,我如何获取信息:模式B中的用户A有哪些权限。
考虑这种情况:我们有两个用户及其相关的scehmas。我们有用户A和用户B.在A中,假设我们有TB1 TB2,在B中,我们说有TBa,TBb。现在我想知道如何找到用户A在Schema B上拥有的权限。
例如:用户A正在写:select * from B.TBb
这意味着用户A正在访问用户B的表,因此显示他具有SELECT权限。我想知道用户A在Schema B上拥有的所有权限。
要执行哪个查询以获取用户A在架构B上拥有的权限列表。
答案 0 :(得分:26)
您可以使用以下查询:
select * from all_tab_privs;
select * from dba_sys_privs;
select * from dba_role_privs;
这些表中的每一个都有一个grantee
列,您可以在where条件中对其进行过滤:
where grantee = 'A'
要查询我首先提出的all_tab_privs
其他架构中的对象(例如表格)的权限,它还有一个table_schema
列。
如果您使用要查询其权限的同一用户登录,则可以使用user_tab_privs
,user_sys_privs
,user_role_privs
。普通的非dba用户可以查询它们。
答案 1 :(得分:2)
使用Szilágyi Donát的帖子中的示例。
我使用两个查询,一个知道我有什么角色,不包括连接补助:
SELECT * FROM USER_ROLE_PRIVS WHERE GRANTED_ROLE != 'CONNECT'; -- Roles of the actual Oracle Schema
知道我想找到我的架构/用户拥有的特权/角色;我的角色ROLE_VIEW_PAYMENTS& ROLE_OPS_CUSTOMERS。但要查找我使用的特定角色的表格/目标:
SELECT * FROM ALL_TAB_PRIVS WHERE GRANTEE='ROLE_OPS_CUSTOMERS'; -- Objects granted at role.
此示例的所有者架构可以是PRD_CUSTOMERS_OWNER(或自身中的角色/架构)。
问候。
答案 2 :(得分:-1)
登录数据库。然后运行以下查询
从dba_role_privs中选择*,其中grantee =' SCHEMA_NAME';
将列出授予架构的所有角色。
感谢Szilagyi Donat的回答。这个是从同一个地方获取的,只是添加了where子句。