SET SESSION AUTHORIZATION

名前

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構文は、セッションと現在のユーザ識別子を元の認証ユーザに戻します。 これらの構文は全てのユーザが実行できます。

Notes

SET SESSION AUTHORIZATIONSECURITY 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では識別子構文("username")を使用できますが、SQLでは使用できません。 SQLではこのコマンドをトランザクション中に実行することができませんが、PostgreSQLでは、禁止する理由が見当たらないため、この制限を付けていません。 SESSION修飾子およびLOCAL修飾子はRESET構文同様、PostgreSQLの拡張です。

標準SQLでは、このコマンドを実行するために必要な権限は、実装に依存するとされています。

関連項目

SET ROLE