無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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

powered by SEO.CUG.NET