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