gpt4 book ai didi

database - Oracle DB - 如何跨模式/所有者显示权限?

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:05 26 4
gpt4 key购买 nike

我在数据库中有所有者 A 和所有者 B。他们每个人都有自己的模式等。如果我从 B 向用户授予权限(例如,他可以访问 A 下的某些 View ),有什么办法可以像这样显示 privs 吗?我的意思是,一个用户在每个数据库所有者及其模式下都拥有一些权利。这样做的原因是我需要确保 B 下的任何用户都无法访问 A 下的任何对象。非常感谢

编辑:对于更明确的问题:

Sceham owner A               Schema owner B
Table X Table CC
Table Y Table DD
View Z View EE

现在假设用户 John 可以访问所有者 A 下的模式,也可以访问 Oracle 所有者 B 拥有的模式下的一个 View 。我如何列出他跨模式的权限?

最佳答案

在 Oracle 中,用户是一个模式 (USER=SCHEMA)。

您可以查询字典表 DBA_TAB_PRIVS 以查看哪些用户/角色有权访问。或者,如果您作为用户 A 连接,查询 USER_TAB_PRIVS 将让您看到哪些用户/角色可以访问您的对象(表、过程、包等...)。

如果为某个角色授予了任何权限,请检查 DBA_ROLE_PRIVS 以查看哪个用户被授予了该角色。

最后,检查 DBA_SYS_PRIVS 以查看是否将某些全局权限授予了用户/角色。大多数全局权限的名称中都有 ANY(SELECT ANY TABLEEXECUTE ANY PROCEDURE...)。全局权限优先于个人权限,可以让您直接或间接访问所有模式中的数据。


这变得有点复杂,因为一个角色可以授予另一个角色。此查询将列出用户 JOHN 可访问的架构 A 中的所有对象:

SELECT DISTINCT table_name, PRIVILEGE
FROM dba_tab_privs
WHERE owner = 'A'
AND (grantee = 'JOHN' OR
grantee IN (SELECT dr.granted_role
FROM dba_role_privs dr
START WITH grantee = 'JOHN'
CONNECT BY PRIOR dr.granted_role = dr.grantee))

关于database - Oracle DB - 如何跨模式/所有者显示权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3573190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com