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

# SET ROLE

## 名前

SET ROLE -- 現在のセッションにおける現在のユーザ識別子を設定する

## 概要

    SET [ SESSION | LOCAL ] ROLE role_name
    SET [ SESSION | LOCAL ] ROLE NONE
    RESET ROLE

## 説明

このコマンドは現在のSQLセッションにおける現在のユーザ識別子を`role_name`に設定します。 ロール名は識別子あるいは文字列リテラルのどちらを使用しても記述することができます。 `SET ROLE`の後、SQLコマンドに対する権限検査は、指名されたロールで普通にログインした場合と同様に行われます。

指定する`role_name`は、現在のセッションユーザがメンバとして属するロールでなければなりません。 （セッションユーザがスーパーユーザであった場合、任意のロールを選択することができます。）

`SESSION`および`LOCAL`修飾子は通常のSETコマンドと同様に動作します。

`NONE`および`RESET`形式は、現在のユーザ識別子を現在のセッションユーザ識別子に戻します。 この形式はすべてのユーザが実行することができます。

## 注釈

このコマンドを使用して、権限を追加することも制限することもできます。 セッションユーザのロールが`INHERITS`属性を持つ場合、自動的に`SET ROLE`で設定されたすべてのロールの権限を持ちます。 この場合、`SET ROLE`は実際、セッションユーザに直接割り当てられている権限、セッションユーザが属するロールに割り当てられている権限の内、指名されたロールで使用可能な権限を残し、他をすべて削除します。 一方、セッションユーザのロールが`NOINHERITS`属性を持つ場合、セッションユーザに直接割り当てられた権限をすべて削除し、指名されたロールで利用可能な権限を獲得します。

特に、スーパーユーザが非特権ユーザへの`SET ROLE`を行うと、スーパーユーザ権限を失うことになります。

`SET ROLE`の影響はSET SESSION AUTHORIZATIONと似ていますが、行われる権限検査はかなり異なります。 また、`SET SESSION AUTHORIZATION`は、その後に実行する`SET ROLE`コマンドでどのロールに変更できるかを決定しますが、`SET ROLE`を使用してロールを変更した場合、その後に実行する`SET ROLE`コマンドで変更可能なロール群は変更されません。

`SET ROLE`はロールのALTER ROLE設定で指定されたセッション変数を処理しません。 これはログイン時のみ適用されます。

`SET ROLE`を`SECURITY DEFINER`関数で使用することはできません。

## 例

    SELECT SESSION_USER, CURRENT_USER;

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

    SET ROLE 'paul';

    SELECT SESSION_USER, CURRENT_USER;

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

## 互換性

PostgreSQLでは、識別子構文（`"rolename"`）を使用できます。 しかし、標準SQLではロール名を文字列リテラルとして記述しなければなりません。 SQLでは、トランザクション内でこのコマンドを実行することを許可していません。 この制限の理由がありませんので、PostgreSQLではこの制限はありません。 `SESSION`、`LOCAL`修飾子、および、`RESET`構文はPostgreSQLの拡張です。

## 関連項目

SET SESSION AUTHORIZATION

前のページ | ホーム | 次のページ
SET CONSTRAINTS | 上に戻る | SET SESSION AUTHORIZATION