从另一个模式检查特定表的当前用户权限的最佳方法是什么?

Gol*_*k84 3 oracle permissions

在我的软件中,在运行时,我需要检查连接的用户是否对某些表具有权限,跨越 2 个不同的模式。从我发现的研究中,我遇到了这两个视图 ALL_TAB_PRIVS_RECD ALL_TAB_PRIVS 我应该使用这些视图中的一个,还是有另一种更好的方法来做到这一点?谢谢

Jac*_*las 5

ALL_TAB_PRIVS是 的超集ALL_TAB_PRIVS_RECD。您可能想要,ALL_TAB_PRIVS因为它包含当前用户拥有的表。


Gol*_*k84 5

我最终提出了这个查询,仅当连接的用户与我想要检查权限的模式不同时才使用该查询:

SELECT PRIVILEGE
FROM ALL_TAB_PRIVS_RECD
WHERE PRIVILEGE = 'SELECT'
AND TABLE_NAME = 'GN_VERSION'
AND OWNER = 'USER_A'
UNION ALL
SELECT PRIVILEGE
FROM SESSION_PRIVS
WHERE PRIVILEGE = 'SELECT ANY TABLE';
Run Code Online (Sandbox Code Playgroud)

这会检查 USER_A 架构上的表 GN_VERSION 的 SELECT 权限