SET SESSION AUTHORIZATION — セッションのユーザ識別子、現在のセッションの現在のユーザ識別子を設定する
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
このコマンドはセッションのユーザ識別子、ならびに、現在のSQLセッションにおける現在のユーザ識別子をuser_name
に設定します。
ユーザ名は、識別子、あるいは文字列リテラルとして記述することもできます。
このコマンドを使用すると、例えば、一時的に非特権ユーザとなり、その後に特権ユーザに戻るといったことが可能です。
セッションのユーザ識別子はクライアントから渡される(おそらく認証済みの)ユーザ名で初期化されます。
現在のユーザ識別子は通常セッションのユーザ識別子と同一ですが、SECURITY DEFINER
関数や類似の機能によって一時的に変更される可能性があります。
SET ROLE
でこれを変更することもできます。
現在のユーザ識別子は権限の検査に影響を与えます。
セッションのユーザ識別子は、最初のセッションユーザ(認証されたユーザ)がスーパーユーザ権限を持っている場合にのみ変更できます。 スーパーユーザ権限を持っていない場合、認証されたユーザ名を指定した場合のみ、このコマンドは受け入れられます。
SESSION
修飾子およびLOCAL
修飾子は、通常のSET
コマンドの場合と同じように機能します。
DEFAULT
構文およびRESET
構文は、セッションと現在のユーザ識別子を元の認証ユーザに戻します。
これらの構文は全てのユーザが実行できます。
SET SESSION AUTHORIZATION
をSECURITY DEFINER
関数内で使用することはできません。
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では、user_name
リテラルの指定方法としてその他の表現を使用できます。
しかし、この違いは実用上は重要ではありません。
PostgreSQLでは識別子構文("
)を使用できますが、SQLでは使用できません。
SQLではこのコマンドをトランザクション中に実行することができませんが、PostgreSQLでは、禁止する理由が見当たらないため、この制限を付けていません。
username
"SESSION
修飾子およびLOCAL
修飾子とRESET
構文は、PostgreSQLの拡張です。
標準SQLでは、このコマンドを実行するために必要な権限は、実装に依存するとされています。