【问题标题】:How to identify user account in DBA_SYS_PRIVS table in Oracle Database如何在 Oracle 数据库的 DBA_SYS_PRIVS 表中识别用户帐户
【发布时间】:2017-03-12 12:47:31
【问题描述】:

我正在尝试在 DBA_SYS_PRIVS 表中查找所有具有特定权限的用户。该表有一个 GRANTEE 列,根据 Oracle 官方网站,GRANTEE 列显示“Grantee name, user, or role received the grant”。那么我怎么知道 GRANTEE 是一个帐户还是一个角色呢?例如,在 Oracle DB 中有一个名为 SYS 的角色和一个名为 SYS 的帐户。那么我怎么知道这是一个帐户还是角色????

同样在 DBA_TAB_PRIVS 表中,有一列称为 GRANTEE。在此表中,GRANTEE 列是“授予访问权限的用户的名称”。所以我真的很困惑,因为“GRANTEE”列在两个不同的表中意味着不同的东西

请帮忙,谢谢索斯斯斯斯斯斯斯斯

【问题讨论】:

  • 默认没有角色SYS。我不希望可以创建一个与用户同名的角色,但我没有尝试过。你是说你在dba_roles 中看到一行role 是SYS?
  • 好吧,也许 SYS 是个错误的例子。但我在 DBA_SYS_PRIVS 的 GRANTEE 列下看到了“DBA”。那么这是指向 DBA 角色还是帐户名称为“DBA”?

标签: database oracle oracle11g audit


【解决方案1】:

不,Oracle 中没有 SYS 角色。

 SQL> select * from dba_roles where role='SYS';

 no rows selected

实际上你不能创建与用户名同名的角色。

 SQL> create role sys;
 create role sys
        *
 ERROR at line 1:
ORA-01921: role name 'SYS' conflicts with another user or role name

只获取没有用户名的角色。

SQL>select grantee from dba_sys_privs where grantee not in(select username from all_users);

只获取没有角色的用户。

 SQL>select grantee from dba_sys_privs where grantee in(select username from all_users)

【讨论】:

  • “DBA”角色呢?在“SYS_USERS”表中,您可以在Name Column下看到DBA帐户,并且DBA_SYS_PRIVS表中还有一个GRANTEE称为DBA?
  • DBA 不是用户,而是它的角色。 select username from all_users where username='DBA'你得到了什么?
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多