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