SET SESSION AUTHORIZATION
SET SESSION AUTHORIZATION ステートメントは、SESSION_USER および USER 特殊レジスターの値を変更します。 また、現行スレッドに関連したユーザー・プロファイルの名前も変更します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことも、 対話式に呼び出すことも可能です。これは、動的に準備できる実行可能ステートメントです。REXX で指定してはなりません。
SET SESSION AUTHORIZATION は、SQL トリガー、SQL 関数、または SQL プロシージャーでは使用できません。
権限
ステートメントで指定された権限名が SYSTEM_USER 特殊レジスターの値と異なる場合、このステートメントの権限 ID によって保持される特権には、システム権限 *ALLOBJ が含まれていなければなりません。
ステートメントで指定された権限名が SYSTEM_USER 特殊レジスターと同じ場合、 このステートメントを実行するための権限は不要です。
ステートメント内のグローバル変数を参照する場合は、ステートメントの権限 ID が保持する特権に、少なくとも次のいずれか 1 つが含まれなければなりません。
- ステートメント内で識別されるグローバル変数に対して、
- そのグローバル変数に対する READ 特権
- そのグローバル変数を含むライブラリーに対する *EXECUTE システム権限
- データベース管理者権限
構文
.-␠=␠-. >>-+-SET SESSION AUTHORIZATION-+--+-----+-----------------------> '-SET SESSION_USER----------' >----+-authorization-name-+------------------------------------>< +-+-SESSION_USER-+---+ | '-USER---------' | +-+-CURRENT USER-+---+ | '-CURRENT_USER-' | +-SYSTEM_USER--------+ +-variable-----------+ '-string-constant----'
説明
- authorization-name
- SESSION_USER 特殊レジスターの新しい値として使用される権限 ID と、実行時の権限 ID を識別します。
権限 ID は、現行サーバーに存在する有効なユーザー・プロファイルまたはグループ・ユーザー・プロファイルでなければなりません。 ユーザー・プロファイル・ハンドルを持たないいくつかのシステム・ユーザー・プロファイルは使用できません。 詳しくは、『Get Profile Handle API』を参照してください。
- CURRENT USER
- SESSION_USER 特殊レジスターおよび実行時の権限 ID は、CURRENT USER 特殊レジスターに設定されます。
- SESSION_USER または USER
- SESSION_USER 特殊レジスターおよび実行時の権限 ID は、USER 特殊レジスターに設定されます。
- SYSTEM_USER
- SESSION_USER 特殊レジスターおよび実行時の権限 ID は、SYSTEM_USER 特殊レジスターに設定されます。
- variable
- 権限 ID 名を含む変数。
スキーマ名で修飾すれば、グローバル変数を使用することもできます。
変数は、次の条件に合っていなければなりません。
- 文字ストリング変数です。
- 変数 に標識変数が関連付けられている場合、標識変数の値は NULL 値を示すものであってはなりません。
- 左寄せされている権限 ID を含み、通常のまたは区切り文字付き ID の形成の規則に従っています。
- 右側はブランクで埋め込まれています。
- NULL 値とすることはできません。
- キーワード USER、SESSION_USER、SYSTEM_USER、または CURRENT_USER であってはなりません。
- string-constant
- 権限 ID を含む文字定数。
注
SET SESSION AUTHORIZATION のその他の影響: SET SESSION AUTHORIZATION によって次の現象が発生します。
- 作業単位中にオープンされたすべてのカーソルがクローズされます。
- すべての LOB ロケーターは解放されます。
- この作業単位のコミットメント定義のもとで獲得されたロックはすべて、解放されます。
- 準備済みステートメントはすべて破棄されます。
- SQL 記述子域はすべて割り振り解除されます。
- プロシージャーの結果セットはすべて消去されます。
- 暗号化パスワードはリセットされます。
- オープンされたネイティブ・データベース・ファイルおよび統合ファイル・システム (IFS) ファイルはすべてクローズされます (ソケット、NTC セッション、およびメモリー・マップを含む)。
SET SESSION AUTHORIZATION の実行時に、グローバル変数および宣言済み一時表を含む、その他のリソースが保存されます。SET SESSION AUTHORIZATION ステートメントを実行する前に、すべての宣言済み一時表を削除または消去し、グローバル変数を消去することが推奨されています。
SET SESSION AUTHORIZATION に関する制約事項: このステートメントは、作業単位中にバックアウトされる可能性のある作業になる最初のステートメントとしてのみ発行可能です。 次の実行可能ステートメントは、SET SESSION AUTHORIZATION を実行する前に発行することができます。
- すべての SQL トランザクション・ステートメント
- すべての SQL 接続ステートメント
- すべての SQL セッション・ステートメント
- GET DIAGNOSTICS
現行サーバーへの接続以外の接続が存在する場合 (デフォルトの活動化グループ以外のすべてのローカル接続を含む)、SET SESSION AUTHORIZATION は使用できません。
保留中のカーソルがオープンされているか、または保留中のロケーターが存在する場合、SET SESSION AUTHORIZATION は使用できません。
SET SESSION AUTHORIZATION の有効範囲: SET SESSION AUTHORIZATION の有効範囲は現行スレッドです。 その他のアプリケーション・プロセスのスレッドは影響を受けません。
例
例 1: 以下のステートメントは、SESSION_USER 特殊レジスターを設定します。
SET SESSION_USER = RAJIV
例 2: セッション許可 ID (SESSION_USER 特殊レジスター) を、 ステートメント発行元の接続を確立する際に使用されたシステム許可 ID の値にします。
SET SESSION AUTHORIZATION SYSTEM_USER