如何查看授予其他用户的架构的权限

时间:2013-01-30 12:57:12

标签: oracle

考虑这种情况:在数据库中,我有两个用户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上拥有的权限列表。

3 个答案:

答案 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_privsuser_sys_privsuser_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子句。