3

オンラインで検索し、これについてOracleのドキュメントを読んだ後、Oracleデータベースで見つかったすべてのカスタムロールを取得するためのヘルプが必要です。システムテーブルまたはデータディクショナリの論理モデルを提供する適切なリソースが見つからないため(dba_roleがどこにマップされているかを確認できます)、私が思いついた最善の方法は次のとおりです。

select role from dba_roles 

次に、そこから、私が知っているsysまたはsysdbaの役割をフィルターで除外します。これは正しくない可能性があります。

使用するテーブルに役立つポインタをいただければ幸いです。

4

1 に答える 1

2

ビューの背後にある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

于 2012-06-20T06:45:15.543 に答える