SET SESSION AUTHORIZATION ステートメント

SET SESSION AUTHORIZATION ステートメントは、SESSION_USER 特殊レジスターの値を変更します。

このステートメントは、トランザクションの制御下にはありません。 SET SESSION AUTHORIZATION ステートメントは、 同一の接続に複数の異なる許可 ID を想定する単一ユーザーをサポートすることを目的としているため、 複数の異なるユーザーが同じ接続を再利用するシナリオ (一般に、 接続プールと呼ばれる) には使用しないでください。

呼び出し

このステートメントはアプリケーション・プログラムに組み込むことができ、また対話式に出すことができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

このステートメントの許可 ID が持つ特権には、特殊レジスターの設定先の許可 ID 値に対する SETSESSIONUSER が含まれている必要があります。

構文

Read syntax diagramSkip visual syntax diagramSET SESSION AUTHORIZATIONSESSION_USER =authorization-nameUSERCURRENT_USERSYSTEM_USERhost-variablestring-constantALLOW ADMINISTRATION

説明

権限名
SESSION_USER 特殊レジスターに新しい値として使用する許可 ID。
ユーザー
USER 特殊レジスターの値。
CURRENT_USER
CURRENT USER 特殊レジスターの値。
SYSTEM_USER
SYSTEM_USER 特殊レジスターの値。
ホスト変数 (host-variable)
タイプ CHAR または VARCHAR の変数です。 host-variable の内容の長さは、128 バイトを超えてはなりません (SQLSTATE 28000)。 NULL に設定することはできません。 host-variable が標識変数を伴っている場合、 その標識変数の値は NULL 値以外でなければなりません (SQLSTATE 28000)。

host-variable の文字は左寄せでなければなりません。 ホスト変数で authorization-name を指定する場合は、大文字への変換が行われないため、すべての文字を大文字で指定する必要があります。

ストリング定数
128 バイトの最大長を超えない文字ストリング定数。
ALLOW ADMINISTRATION
同じ作業単位内でこのステートメントよりも前に SQL スキーマ・ステートメントを指定できることを示します。

ルール

  • SESSION_USER 特殊レジスターで指定される値は、 タイプ USER の許可 ID の規則に従わなければなりません (SQLSTATE 42602)。
  • OWNER BIND オプションは、静的 SQL ステートメントに使用される許可 ID を指定します。
  • このステートメントは、開かれている WITH HOLD カーソルがない、 新しい作業単位の最初のステートメント (SET 特殊レジスター・ステートメントを除く) として発行します (SQLSTATE 25001)。 この制限には、SET 特殊レジスター・ステートメント以外のステートメントに対するすべての PREPARE 要求も含まれます。
  • SESSION_USER 特殊レジスターの値は、 DYNAMICRULES(RUN) BIND オプションでバインドされたパッケージのすべての動的 SQL ステートメントに対する許可 ID として使用されます (これには、 パッケージがルーチンで使用されていない場合の INVOKERUN および DEFINERUN も含まれます)。 パッケージが DYNAMICRULES オプションに基づいて所有者、起動側、 または定義元の許可に使用される場合、このステートメントは、パッケージ内から発行される動的 SQL ステートメントに対して効果がありません。

  • SET SESSION AUTHORIZATION ステートメントを使用して、セッション許可 ID を変更することができます。 セッション許可 ID とは、接続の現在のユーザーを表すもので、DYNAMICRULES 実行パッケージ内の動的 SQL に比較してすべての許可検査を行うときにデータベース・マネージャーが考慮に入れる許可 ID です。 SESSION_USER 特殊レジスターは、このセッション許可 ID の現行値を表示するのに使用できます。
  • 新しい接続における SESSION_USER 特殊レジスターの初期値は、 SYSTEM_USER 特殊レジスターの値と同じです。
  • このステートメントで指定されているセッション許可 ID のグループ情報は、 ステートメントの実行時に獲得されます。
  • SESSION_USER 特殊レジスターの設定は、 CURRENT SCHEMA または CURRENT PATH 特殊レジスターには影響を与えません。
  • SESSION_USER 特殊レジスターの設定中にエラーが発生した場合、レジスターは直前の値に復帰します。
  • このステートメントを使用して、複数の異なるユーザーが同一の接続を再利用できるようにしないでください。元の接続所有者がもっていた SESSION_USER 特殊レジスター値を変更する能力が、各ユーザーに継承されてしまうからです。 このステートメントは、特権のチェックを SYSTEM_USER の値に依存しており、 最初の接続許可 ID は SET SESSION AUTHORIZATION ステートメントによって変更されません。 さらに、このステートメントでは、接続の再利用に影響を与える以下の振る舞いに対処できません。
    • CONNECT 特権には、新しい許可 ID のチェックが行われません。
    • 更新可能特殊レジスターの内容がリセットされません。 特に、ENCRYPTION PASSWORD 特殊レジスターの内容が変更されず、 新しい許可 ID で暗号化または暗号化解除できてしまいます。
    • 宣言済みグローバル一時表の内容が影響を受けず、 新しい許可 ID からアクセスできてしまいます。
    • リモート・サーバーへの既存のリンクがリセットされません。
  • ALLOW ADMINISTRATION 節が指定される場合、 以下のタイプのステートメントまたは操作を SET SESSION AUTHORIZATION ステートメントよりも先行させることができます。
    • データ定義言語 (DDL)。 これにはセーブポイントの定義やグローバル一時表の宣言が含まれますが、SET INTEGRITY は含まれません。
    • GRANT および REVOKE ステートメント
    • LOCK TABLE ステートメント
    • COMMIT および ROLLBACK ステートメント
    • 特殊レジスターの SET
    • グローバル変数の SET

  • 例 1: 以下のステートメントは、SESSION_USER 特殊レジスターを設定します。
       SET SESSION_USER = RAJIV
  • 例 2: セッション許可 ID (SESSION_USER 特殊レジスター) を、 ステートメント発行元の接続を確立する際に使用されたシステム許可 ID の値にします。
       SET SESSION AUTHORIZATION SYSTEM_USER