プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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データ・ディクショナリ・ビューを問い合せると、現在使用可能なロールを参照できます。


関連項目:

  • ロールの作成の詳細は、「CREATE ROLE」を参照してください。

  • ユーザーのデフォルト・ロールの変更については、「ALTER USER」を参照してください。

  • SESSION_ROLESセッション・パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。


前提条件

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

構文

set_role::=

set_role.gifの説明が続きます。
図「set_role.gif」の説明

セマンティクス

role

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

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

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

ALL句

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

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

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

ALL句の制限事項: ALL句には、次の制限事項があります。

  • パスワード付きのロールを直接付与された場合は、この句を指定できません。含めた場合、ORA-01979エラーが発生します。

  • この句を使用して、保護アプリケーション・ロールを使用可能にすることはできません。保護アプリケーション・ロールとは、認可済パッケージのみを使用するアプリケーションによって使用可能になるロールです。保護アプリケーション・ロールの作成の詳細は『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;