如何确定不在DBA_TAB_PRIVS表中的用户的表权限?

19 浏览
0 Comments

如何确定不在DBA_TAB_PRIVS表中的用户的表权限?

请问有人可以告诉我如何在SQL控制台中显示特定用户的所有权限/规则吗?

0
0 Comments

问题的出现原因:问题的出现是因为用户不具备DBA或SYS角色,但仍想确定其自身账户的表权限。

解决方法:解决该问题的方法是查看其他数据库视图,而不是DBA_TAB_PRIVS表。以下是可以提供所需信息的其他视图:

- DBA_SYS_PRIVS:该视图列出了所有用户的系统权限,包括用户的角色、系统权限以及这些权限是如何授予的。

- DBA_ROLE_PRIVS:该视图列出了所有用户的角色权限,包括用户的角色、角色的权限以及这些权限是如何授予的。

通过查看以上两个视图,用户可以确定自己账户的表权限。另外,还可以参考提供的链接http://psoug.org/reference/roles.html,该链接可能提供更多关于角色和权限的相关信息。

0
0 Comments

如何确定不在DBA_TAB_PRIVS表中的用户的表权限?

在数据库中确定不在DBA_TAB_PRIVS表中的用户的表权限可能会遇到一些困难。用户可以被授予系统权限,这些权限可以在DBA_SYS_PRIVS表中看到。用户还可以被授予对象权限,这些权限可以在DBA_TAB_PRIVS表中看到。此外,用户还可以被授予角色,这些角色可以在DBA_ROLE_PRIVS表中看到。角色可以是默认的或非默认的,并且可能需要密码。因此,仅仅因为用户被授予了一个角色,并不意味着用户默认情况下可以使用通过该角色获取的权限。这些角色可以进一步被授予系统权限、对象权限和其他角色,可以通过查看ROLE_SYS_PRIVS、ROLE_TAB_PRIVS和ROLE_ROLE_PRIVS来查看。Pete Finnigan的脚本可以遍历这些关系,显示所有流向用户的权限。

如果想自己编写脚本,查询会变得非常具有挑战性。我个人会使用Pete Finnigan的find_all_privs脚本。如果你想自己编写脚本,查询会变得非常具有挑战性。用户可以被授予系统权限,这些权限可以在DBA_SYS_PRIVS中看到。他们可以被授予对象权限,这些权限可以在DBA_TAB_PRIVS中看到。他们还可以被授予角色,这些角色可以在DBA_ROLE_PRIVS中看到(角色可以是默认的或非默认的,还可以要求密码,因此,用户被授予角色并不意味着用户默认情况下可以使用通过角色获得的权限)。但是这些角色又可以被授予系统权限、对象权限和其他角色,可以通过查看ROLE_SYS_PRIVS、ROLE_TAB_PRIVS和ROLE_ROLE_PRIVS来查看。Pete的脚本遍历这些关系,显示所有流向用户的权限。

但是,对于我们这些没有SYS权限,只想查看自己账户权限的人来说,该脚本毫无用处。我无法访问UTL_FILE,也无法访问DBA_SYS_PRIVS和脚本查看的其他DBA和SYS区域。

如果有人有这些脚本的副本,能否在这里或者更可靠的地方(如gist)发布一下?该网站已经无法访问了。

- 该网站已经可以访问。在网站的顶部,有一个限制是"这些脚本不能在其他地方发布或托管"。我的回答的第二段概述了脚本的内容。脚本本身有几百行代码,重新创建起来非常麻烦。

0
0 Comments

如何确定不在DBA_TAB_PRIVS表中的用户的表权限?

有时候我们需要确定那些不在DBA_TAB_PRIVS表中的用户的表权限。我们可以尝试使用下面的视图来查找这些用户的权限:

SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

数据库管理员(DBA)和其他高级用户可以使用这些视图的`DBA_`版本来查找授予其他用户的权限。这些视图在官方文档中有详细的说明。

然而,这些视图只显示直接授予用户的权限。如果需要找到所有的权限,包括通过角色间接授予的权限,就需要使用更复杂的递归SQL语句:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;

通过以上的查询语句,我们可以找到不在DBA_TAB_PRIVS表中的用户的表权限。

0