如何列出用户的所有select、insert、delete或update权限的授权

24 浏览
0 Comments

如何列出用户的所有select、insert、delete或update权限的授权

数据库:Oracle 10g

我可以将DML命令授权给某个用户以访问某些表:

GRANT SELECT, UPDATE, DELETE, INSERT ON USER_A.TABLE_1 TO USER_B;

如何列出用户USER_B所接收到的所有授权(关于select、update、insert、delete),以及对应的表格?

我查看了表格"all_tab_privs_recd",但没有我要找的内容。

0
0 Comments

问题的出现原因是all_tab_privs_recd视图和all_tab_privs视图只显示具有显式授权的表,它们不显示由USER_B拥有的表(除非授予了其他用户的授权,即GRANTEE和OWNER相同)。要查看用户拥有的表以及完全访问权限,需要查看all_tables

解决方法是使用以下查询来列出用户的所有选择、插入、删除或更新的授权:

SELECT
    PRIVILEGE,
    TABLE_NAME
FROM
    ALL_TAB_PRIVS
WHERE
    GRANTEE = 'USER_A'
    AND PRIVILEGE IN ('SELECT', 'INSERT', 'DELETE', 'UPDATE');

这将返回用户USER_A具有选择、插入、删除或更新权限的所有表的列表。

0
0 Comments

在这个问题中,用户遇到了无法使用建议的视图来列出USER_B接收到的所有授权的问题。用户在查询了一系列视图后发现,没有找到满足条件的结果。具体来说,用户使用了以下查询语句:

select * from all_tables where owner='USER_A'
select * from all_tab_privs_recd where grantor = 'USER_A'
select * from all_tab_privs_recd where grantee = 'USER_A'
select * from all_tab_privs_recd where grantee = 'USER_B'
select * from all_tab_privs_recd where grantor = 'USER_B'

然而,这些查询并没有返回用户期望的结果。对此问题的解决方法如下:

SELECT *
FROM all_tab_privs
WHERE grantee = 'USER_B';

通过使用`all_tab_privs`视图,用户可以列出USER_B接收到的所有SELECT、INSERT、DELETE和UPDATE的授权。这个视图包含了用户的授权信息,可以通过筛选`grantee`字段来获取特定用户的授权信息。

以下是整理后的文章:

用户在尝试列出USER_B接收到的所有SELECT、INSERT、DELETE和UPDATE的授权时遇到了困难。用户尝试使用了一系列视图进行查询,但没有得到期望的结果。具体来说,用户使用了`all_tables`和`all_tab_privs_recd`视图进行查询,但没有找到满足条件的结果。在面对这个问题时,用户尝试了以下查询语句:

select * from all_tables where owner='USER_A'
select * from all_tab_privs_recd where grantor = 'USER_A'
select * from all_tab_privs_recd where grantee = 'USER_A'
select * from all_tab_privs_recd where grantee = 'USER_B'
select * from all_tab_privs_recd where grantor = 'USER_B'

然而,这些查询并没有返回用户期望的结果。为了解决这个问题,用户可以使用下面的查询语句:

SELECT *
FROM all_tab_privs
WHERE grantee = 'USER_B';

通过使用`all_tab_privs`视图,用户可以列出USER_B接收到的所有SELECT、INSERT、DELETE和UPDATE的授权。这个视图包含了用户的授权信息,可以通过筛选`grantee`字段来获取特定用户的授权信息。通过使用这个查询语句,用户可以得到他们所需的结果。

0
0 Comments

如何列出用户对于select、insert、delete或update的所有授权?

问题出现的原因:

用户需要查看特定用户对于select、insert、delete或update的所有授权,以便了解该用户在数据库中的权限情况。

解决方法:

Pete Finnegan是一位Oracle安全专家,他提供了多种不同的工具来帮助解决这些问题。可以访问他的网站(http://www.petefinnigan.com/tools.htm),并找到适用于此问题的find_all_privs.sql工具。

下面是find_all_privs.sql的代码:

SELECT lpad(' ', 2*(level-1)) || granted_role "User, his roles and roles privileges"

FROM (

/* THE USERS */

SELECT NULL grantee, username granted_role

FROM dba_users

WHERE username LIKE upper('%&enter_username%')

/* THE ROLES TO ROLES RELATIONS */

UNION

SELECT grantee, granted_role

FROM dba_role_privs

/* THE ROLES TO PRIVILEGE RELATIONS */

UNION

SELECT grantee, privilege

FROM dba_sys_privs

)

START WITH grantee IS NULL

CONNECT BY grantee = PRIOR granted_role;

希望对您有所帮助。

0