SET SESSION AUTHORIZATION

名前

SET SESSION AUTHORIZATION -- セッションのユーザ識別子、現在のセッションの現在のユーザ識別子の設定

概要

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION username
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

説明

このコマンドはセッションのユーザ識別子、並びに、現在のSQLセッションコンテキストにおける現在のユーザ識別子を username に設定します。 ユーザ名は、識別子として書くことも、文字列リテラルとして書くこともできます。 このコマンドを使用して、例えば、一時的に非特権ユーザとなり、その後に特権ユーザに戻ることが可能です。

セッションのユーザ識別子はクライアントから渡される(おそらくは認証された)ユーザ名で初期化されます。 現在のユーザ識別子は通常セッションのユーザ識別子と同一ですが、"setuid" 関数や似たような機構によって一時的に変更することができます。 現在のユーザ識別子は権限の検査に関係します。

セッションのユーザ識別子は、最初のセッションユーザ (認証されたユーザ) がスーパーユーザ権限を持っている場合にのみ変更できます。 スーパーユーザ権限を持っていない場合、コマンドは認証されたユーザ名を指定しなければ受け入れられません。

SESSION 修飾子および LOCAL 修飾子は、通常の SET コマンドの場合と同じように機能します。

DEFAULT 形式および RESET 形式は、セッションと現在のユーザ識別子を元の認証ユーザにリセットします。 これらの形式は常に受け入れられます。

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user 
--------------+--------------
 peter        | peter

SET SESSION AUTHORIZATION 'paul';

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user 
--------------+--------------
 paul         | paul

互換性

標準SQLでは、username リテラルの部分には他の異なった表現を使用できます。 この違いは実際は重要ではありません。 PostgreSQL では識別子構文 ("username") を使用できますが、SQLでは使用できません。 SQLではこのコマンドをトランザクション中に実行することができませんが、PostgreSQL では、禁止する理由が見当たらないため、この制限をつけていません。 標準における、このコマンドを実行するために必要な権限は実装依存の状態です。