PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# SET SESSION AUTHORIZATION

## 名前

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

## 概要

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

## 説明

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

セッションのユーザ識別子はクライアントから渡される（おそらく認証済みの）ユーザ名で初期化されます。 現在のユーザ識別子は通常セッションのユーザ識別子と同一ですが、`SECURITY DEFINER`関数や類似の機能によって一時的に変更される可能性があります。 SET ROLEでこれを変更することもできます。 現在のユーザ識別子は権限の検査に影響を与えます。

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

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

`DEFAULT`構文および`RESET`構文は、セッションと現在のユーザ識別子を元の認証ユーザに戻します。 これらの構文は全てのユーザが実行できます。

## Notes

`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では、`username`リテラルの指定方法としてその他の表現を使用できます。 しかし、この違いは実用上は重要ではありません。 PostgreSQLでは識別子構文（`"username"`）を使用できますが、SQLでは使用できません。 SQLではこのコマンドをトランザクション中に実行することができませんが、PostgreSQLでは、禁止する理由が見当たらないため、この制限を付けていません。 `SESSION`修飾子および`LOCAL`修飾子は`RESET`構文同様、PostgreSQLの拡張です。

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

## 関連項目

SET ROLE

前のページ | ホーム | 次のページ
SET ROLE | 上に戻る | SET TRANSACTION