在网上搜索并阅读 Oracle 文档后,我需要一些帮助来获取在 Oracle 数据库中找到的所有自定义角色。由于我找不到一个很好的资源来为我提供系统表或数据字典的逻辑模型(所以我可以看到 dba_role 映射到的位置),我能想到的最好的方法是:
select role from dba_roles
然后从那里过滤掉我知道的任何 sys 或 sysdba 角色——我知道这可能不正确。
任何有用的关于使用哪个表的指针将不胜感激。
在网上搜索并阅读 Oracle 文档后,我需要一些帮助来获取在 Oracle 数据库中找到的所有自定义角色。由于我找不到一个很好的资源来为我提供系统表或数据字典的逻辑模型(所以我可以看到 dba_role 映射到的位置),我能想到的最好的方法是:
select role from dba_roles
然后从那里过滤掉我知道的任何 sys 或 sysdba 角色——我知道这可能不正确。
任何有用的关于使用哪个表的指针将不胜感激。
您可以找到视图背后的 SQL dba_roles
:
select * from dba_views where view_name = 'DBA_ROLES';
这是我系统上的代码:
select name, decode(password, null, 'NO',
'EXTERNAL', 'EXTERNAL',
'GLOBAL', 'GLOBAL',
'YES'),
decode(password, null, 'NONE',
'EXTERNAL', 'EXTERNAL',
'GLOBAL', 'GLOBAL',
'APPLICATION', 'APPLICATION',
'PASSWORD')
from user$
where type# = 0 and name not in ('PUBLIC', '_NEXT_USER');
几年前,当我跑步时,select * from sys.user$ where type# = 0 order by ctime;
我几乎同时看到了很多视图。ctime
(时间甚至在我的数据库创建之前。)假设旧角色是系统生成的可能是安全的。
但这并不一定意味着最新的角色都是自定义角色。ctime
升级或重新编译后,或者安装新选项后,可能会发生变化。
安装一个新实例并减去您在其中看到的任何内容可能会有所帮助dba_roles
。