在 Oracle 中找不到分配给创建的角色的权限

Can not find Permissions assigned to created roles in Oracle

我在 SQL dev 中以 SYSTEM 身份登录并执行了以下操作:

ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;

CREATE TABLE Attendance
(
    ID INT ,
    NAME NVARCHAR2(300),

    CONSTRAINT IdPk PRIMARY KEY (ID)
);

CREATE ROLE DataEntry;
GRANT SELECT, INSERT, UPDATE ON Attendance TO DataEntry;

如何找到分配给DataEntry角色的权限?我已经研究了一段时间,但找到的答案没有用。例如:

select * from ROLE_ROLE_PRIVS;
select * from ROLE_TAB_PRIVS;
select * from ROLE_SYS_PRIVS;

这些语句 return 许多角色,例如:dba、sys、....但我仍然找不到我的 'DataEntry' 角色。谁可以给我解释一下这个?非常感谢。

如果您创建了任何连接为 SYSTEM 的对象,您最好不要这样做。 SYSSYSTEM比较特殊,不要乱用


关于你的问题:

SQL> show user
USER is "SCOTT"
SQL> create role dataentry;

Role created.

SQL> grant select, insert, update on emp to dataentry;

Grant succeeded.

SQL> select * From role_tab_privs;

ROLE       OWNER      TABLE_NAME COLUMN_NAM PRIVILEGE  GRA
---------- ---------- ---------- ---------- ---------- ---
DATAENTRY  SCOTT      EMP                   INSERT     NO
DATAENTRY  SCOTT      EMP                   SELECT     NO
DATAENTRY  SCOTT      EMP                   UPDATE     NO

SQL>

如果你想以特权用户的身份进行这样的查询,那就是dba_tab_privs:

SQL> show user
USER is "SYS"
SQL> select * From dba_tab_privs where owner = 'SCOTT';

GRANTEE      OWNER      TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
------------ ---------- ---------- ---------- ---------- --- ---
MIKE         SCOTT      DEPT       SCOTT      DELETE     YES NO
DATAENTRY    SCOTT      EMP        SCOTT      INSERT     NO  NO
DATAENTRY    SCOTT      EMP        SCOTT      SELECT     NO  NO
DATAENTRY    SCOTT      EMP        SCOTT      UPDATE     NO  NO

SQL>

由于您标记了 SQLDev...打开视图菜单,select DBA。

添加您的连接。展开,转到安全,Select 角色,打开您的角色。

观察“对象权限”面板。

SQL 开发人员使用此 SQL

获取角色的对象权限
SELECT privilege   AS "Object Privilege"
     , owner       AS "Schema"
     , table_name  AS "Object"
  FROM dba_tab_privs
 WHERE grantee = :name -- DATAENTRY
 ORDER BY 2
        , 3
        , 1