27

考虑这种情况:在数据库中,我有两个用户 A 和 B 以及他们相应的架构。

我想知道,我如何获得信息:架构 B 中的 USER A 有哪些权限。

考虑这种情况:我们有两个用户及其关联的方案。我们有用户 A 和用户 B。在 A 中,假设我们有 TB1 TB2,在 B 中,假设我们有 TBa,TBb。现在我想知道如何找到用户 A 对 Schema B 的权限。

例如: 用户 A 正在写:select * from B.TBb 这意味着用户 A 正在访问用户 B 的表,因此表明他具有 SELECT 权限。我想知道用户 A 对架构 B 的所有权限。

应执行哪个查询以获取用户 A 对模式 B 的权限列表。

4

3 回答 3

35

您可以使用以下查询:

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 用户可以查询它们。

于 2013-01-30T13:27:56.100 回答
3

使用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(或角色/模式本身)。

问候。

于 2013-10-22T22:22:38.757 回答
0

登录到数据库。然后运行以下查询

select * from dba_role_privs where grantee = 'SCHEMA_NAME';

将列出授予架构的所有角色。

感谢Szilagyi Donat的回答。这个取自相同的,只是添加了 where 子句。

于 2016-03-16T21:16:13.500 回答