web-dev-qa-db-ja.com

Oracleデータディクショナリ、組み込みの役割とカスタムの役割を区別する

Oracleでは、DBA_ROLESビューを記述した場合、3つの列しか取得できません。

SQL> describe dba_roles;
 Name                      Null     Type
------------------------------------------------
 ROLE                      NOT NULL VARCHAR2(30)
 PASSWORD_REQUIRED                  VARCHAR2(8)
 AUTHENTICATION_TYPE                VARCHAR2(11)

特定のロールがSET_CATALOG_ROLEのようなRDBMSに組み込まれている組み込みロールの1つであるかどうか、またはLEMONADE_STAND_MANAGERのようなユーザーが作成したロールであるかどうかを教えてくれる列はありません。

  • ユーザーが作成したすべてのロール(組み込みのすべてのロールを除く)のリストを取得するにはどうすればよいですか?
6

Oracle 12cの事前定義されたロールのリストは、 セキュリティガイド にあります。また、Oracle 12cでは、ビューdba_rolesにOracle_MAINTAINED列があります。この列の「Y」は、これがOracleインストールスクリプトによって作成されたロールであることを示します。 12cより前のOracleバージョンの場合、この列は存在しません。したがって、12cより前のOracleバージョンの場合は、マニュアルを確認するか、インターネットでOracleの事前定義されたロールのリストを検索する必要があります。

すべてのロールとユーザーを含むディクショナリテーブルSYS.USER $があります。このビューは、非dbaユーザーには表示されません。

select user#,type#,name from user$ order by user#;

内部Iduser#で注文されたすべてのユーザーとロールを一覧表示します。 typeis 0の場合、アイテムはロールです。ほとんどの場合、これらのIDは順次作成されるため、インストール中に作成されるロールとユーザーのIDは低くなります。しかし、多くのOracleが作成した12cデータベースが高いIDで作成されたことがわかりました。また、データベースをアップグレードする場合、ユーザーが作成したロールよりも高いIDを持つOracleスクリプトによって作成されたロールがあります。したがって、user#は信頼できる基準ではありません。

4
miracle173

ここにインストールされているロールを参照してください http://www.morganslibrary.org/reference/roles.html

インストールされたロールを持つテーブルを作成します。次に、作成したテーブルから存在しないdba_rolesから選択します。

1
Stringer