SET ROLE

目的

データベースでは、ユーザー・ログイン時に、ユーザーに明示的に付与されたすべての権限およびユーザーのすべてのデフォルトのロールが使用可能になります。セッション中、ユーザーまたはアプリケーションは、SET ROLE文を使用して、そのセッションに対してロールを何度でも使用可能または使用禁止にできます。

148を超えるユーザー定義のロールを一度に使用可能にできません。

ノート:

  • ほとんどのロールは、直接的に付与されているか、または他のロールを介して付与されていないかぎり、使用可能または使用禁止にできません。ただし、保護アプリケーション・ロールは、関連付けられているPL/SQLパッケージによって付与して使用可能にすることができます。保護アプリケーション・ロールについては、「USING packageCREATE 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データ・ディクショナリ・ビューを問い合せると、現在使用可能なロールを参照できます。

関連項目:

前提条件

SET ROLE 文に指定するロールが付与されている必要があります。

構文

セマンティクス

role

現行のセッションで使用可能にするロールを1つ以上指定します。指定されていないすべてのロールは、現行のセッションの存続期間中、または現行のセッションで他のSET ROLE文が発行されるまで使用禁止になります。

IDENTIFIED BY password句では、ロールに対するパスワードを指定します。ロールにパスワードが設定されている場合は、指定する必要があります。

ロールの設定の制限事項

グローバルに識別されたロールを指定することはできません。グローバル・ロールは、ログイン時にデフォルトで使用可能になり、後で再度使用可能にすることはできません。

ALL句

ALLを指定すると、現行のセッションに対して付与されているすべてのロールを使用可能にできます。ただし、EXCEPT句に任意に指定されているロールは除きます。

EXCEPT句に指定するロールは、ユーザーに直接付与されている必要があります。他のロールによってユーザーに付与されたものは無効です。

直接付与されているロール、および他のロールを介してユーザーに付与されているロールをEXCEPT句に指定した場合、そのロールの付与先のロールにより、そのロールは使用可能のままになります。

ALL句の制限事項

ALL句には、次の制限事項が適用されます。

  • この句を使用して、ユーザーに直接付与されているパスワード付きのロールを使用可能にすることはできません。

  • この句を使用して、保護アプリケーション・ロールを使用可能にすることはできません。保護アプリケーション・ロールとは、認可済パッケージのみを使用するアプリケーションによって使用可能になるロールです。保護アプリケーション・ロールの作成の詳細は『Oracle Databaseセキュリティ・ガイド』、チュートリアルは『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

NONE

NONEを指定すると、現行のセッションで、DEFAULTロールを含むすべてのロールを使用禁止にできます。

ロールの設定: 例

次の文は、現行のセッションのパスワードwarehouseによって識別されるロールdw_managerを有効にします。

SET ROLE dw_manager IDENTIFIED BY warehouse; 

次の文は、現行のセッションで付与されているロールをすべて使用可能にします。

SET ROLE ALL; 

次の文は、dw_managerを除くロールをすべて使用可能にします。

SET ROLE ALL EXCEPT dw_manager;

次の文は、現行のセッションで付与されているすべてのロールを使用禁止にします。

SET ROLE NONE;