在 Oracle 中找不到分配给已创建角色的权限
Posted
技术标签:
【中文标题】在 Oracle 中找不到分配给已创建角色的权限【英文标题】:Can not find Permissions assigned to created roles in Oracle 【发布时间】:2021-03-21 10:58:34 【问题描述】:我在 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;
这些语句返回许多角色,例如:dba、sys、.... 但我仍然找不到我的“DataEntry”角色。谁可以给我解释一下这个?非常感谢。
【问题讨论】:
您是否有理由使用未记录的 _ORACLE_SCRIPT 设置?除非 Oracle 支持明确告诉您,否则用户不应该对此胡闹。将角色标记为 Oracle 管理会导致它从某些数据字典视图中排除,这不会让我感到震惊,但我不会在本地对其进行测试以找出答案。 mikedietrichde.com/2020/02/10/… 查看 > DBA > 安全 > 角色,sqldev 会显示你想要的一切 【参考方案1】:如果您创建了以SYSTEM
连接的任何对象,您最好不要这样做。 SYS
和 SYSTEM
很特别,不要乱来。
至于你的问题:
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>
【讨论】:
你可以,但你不会得到任何东西,因为它是 ROLE_TAB_PRIVS(不是“PRIVES”),并且角色名称应该是大写的:WHERE ROLE = 'DATAENTRY'【参考方案2】:由于您标记了 SQLDev...打开查看菜单,选择 DBA。
添加您的连接。展开,转到安全,选择角色,打开您的角色。
观察 Object Privs 面板。
SQL Developer 使用此 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
【讨论】:
以上是关于在 Oracle 中找不到分配给已创建角色的权限的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 5.6 中找不到 Trait 'App\HasRoles' 错误
oracle 10g中权限分配问题 对于角色CONNECT,RESOURCE的权限我查看了, 我赋予一个用户这两个角色。