如何列出用户的所有select、insert、delete或update权限的授权
问题的出现原因是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具有选择、插入、删除或更新权限的所有表的列表。
在这个问题中,用户遇到了无法使用建议的视图来列出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`字段来获取特定用户的授权信息。通过使用这个查询语句,用户可以得到他们所需的结果。
如何列出用户对于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;
希望对您有所帮助。