SET ROLE
目的
データベースでは、ユーザー・ログイン時に、ユーザーに明示的に付与されたすべての権限およびユーザーのすべてのデフォルトのロールが使用可能になります。セッション中、ユーザーまたはアプリケーションは、SET
ROLE
文を使用して、そのセッションに対してロールを何度でも使用可能または使用禁止にできます。
148を超えるユーザー定義のロールを一度に使用可能にできません。
ノート:
-
ほとんどのロールは、直接的に付与されているか、または他のロールを介して付与されていないかぎり、使用可能または使用禁止にできません。ただし、保護アプリケーション・ロールは、関連付けられているPL/SQLパッケージによって付与して使用可能にすることができます。保護アプリケーション・ロールについては、
「USING
package」
のCREATE ROLEセマンティクスおよび『Oracle Databaseセキュリティ・ガイド』を参照してください。 -
SET
ROLE
が正常に完了するのは、コール・スタックに定義者権限ユニットがない場合のみです。少なくとも1つのDRユニットがコール・スタックにある場合は、SET
ROLE
コマンドを発行するとORA
-06565
が発生します。定義者権限ユニットの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 -
SET
ROLE
コマンドをPL/SQLから実行するには、動的SQLを使用する必要があります(EXECUTE
IMMEDIATE
文によって実行するのが望ましい)。この文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
SESSION_ROLES
データ・ディクショナリ・ビューを問い合せると、現在使用可能なロールを参照できます。
関連項目:
-
ロールの作成の詳細は、「CREATE ROLE」を参照してください。
-
ユーザーのデフォルト・ロールの変更については、「ALTER USER」を参照してください。
-
SESSION_ROLES
セッション・パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
前提条件
SET
ROLE
文に指定するロールが付与されている必要があります。
構文
set_role::=
セマンティクス
role
現行のセッションで使用可能にするロールを1つ以上指定します。指定されていないすべてのロールは、現行のセッションの存続期間中、または現行のセッションで他のSET
ROLE
文が発行されるまで使用禁止になります。
IDENTIFIED
BY
password
句では、ロールに対するパスワードを指定します。ロールにパスワードが設定されている場合は、指定する必要があります。
ロールの設定の制限事項
グローバルに識別されたロールを指定することはできません。グローバル・ロールは、ログイン時にデフォルトで使用可能になり、後で再度使用可能にすることはできません。
IDENTIFIED BY
設定可能なパスワードは、最大長1024バイトです。
ALL句
ALL
を指定すると、現行のセッションに対して付与されているすべてのロールを使用可能にできます。ただし、EXCEPT
句に任意に指定されているロールは除きます。
EXCEPT
句に指定するロールは、ユーザーに直接付与されている必要があります。他のロールによってユーザーに付与されたものは無効です。
直接付与されているロール、および他のロールを介してユーザーに付与されているロールをEXCEPT
句に指定した場合、そのロールの付与先のロールにより、そのロールは使用可能のままになります。
ALL句の制限事項
ALL
句には、次の制限事項が適用されます。
-
この句を使用して、ユーザーに直接付与されているパスワード付きのロールを使用可能にすることはできません。
-
この句を使用して、保護アプリケーション・ロールを使用可能にすることはできません。保護アプリケーション・ロールとは、認可済パッケージのみを使用するアプリケーションによって使用可能になるロールです。保護アプリケーション・ロールの作成の詳細は『Oracle Databaseセキュリティ・ガイド』、チュートリアルは『Oracle Database 2日でセキュリティ・ガイド』を参照してください。
例
ロールの設定: 例
現在のセッションのパスワードによって識別されるロールdw_manager
を有効にするには、次の文を発行します。
SET ROLE dw_manager IDENTIFIED BY password;
次の文は、現行のセッションで付与されているロールをすべて使用可能にします。
SET ROLE ALL;
次の文は、dw_manager
を除くロールをすべて使用可能にします。
SET ROLE ALL EXCEPT dw_manager;
次の文は、現行のセッションで付与されているすべてのロールを使用禁止にします。
SET ROLE NONE;