.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "SET ROLE" "" "2007-05-04" "SQL - 言語" "SQLコマンド"
.SH NAME
SET ROLE \- 現在のセッションにおける現在のユーザ識別子を設定する

.SH SYNOPSIS
.sp
.nf
SET [ SESSION | LOCAL ] ROLE \fIrolename\fR
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE
.sp
.fi
.SH "説明"
.PP
このコマンドは現在のSQLセッションコンテキストにおける現在のユーザ識別子を\fIrolename\fRに設定します。
ロール名は識別子あるいは文字列リテラルのどちらを使用しても記述することができます。
\fBSET ROLE\fRの後、SQLコマンドに対する権限検査は、指名されたロールで普通にログインした場合と同様に行われます。
.PP
指定する\fIrolename\fRは、現在のセッションユーザがメンバとして属するロールでなければなりません。
（セッションユーザがスーパーユーザであった場合、任意のロールを選択することができます。）
.PP
SESSIONおよびSESSION修飾子は通常のSET [\fBset\fR(l)]コマンドと同様に動作します。
.PP
NONEおよびRESET形式は、現在のユーザ識別子を現在のセッションユーザ識別子に戻します。
この形式はすべてのユーザが実行することができます。
.SH "N注釈"
.PP
このコマンドを使用して、権限を追加することも制限することもできます。
セッションユーザのロールがINHERITS属性を持つ場合、自動的に\fBSET ROLE\fRで設定されたすべてのロールの権限を持ちます。
この場合、\fBSET ROLE\fRは実際、セッションユーザに直接割り当てられている権限、セッションユーザが属するロールに割り当てられている権限の内、指名されたロールで使用可能な権限を残し、他をすべて削除します。
一方、セッションユーザのロールがNOINHERITS属性を持つ場合、セッションユーザに直接割り当てられた権限をすべて削除し、指名されたロールで利用可能な権限を獲得します。
.PP
特に、スーパーユーザが非特権ユーザへの\fBSET ROLE\fRを行うと、スーパーユーザ権限を失うことになります。
.PP
\fBSET ROLE\fRの影響はSET SESSION AUTHORIZATION [\fBset_session_authorization\fR(l)]と似ていますが、行われる権限検査はかなり異なります。
また、\fBSET SESSION AUTHORIZATION\fRは、その後に実行する\fBSET ROLE\fRコマンドでどのロールに変更できるかを決定しますが、\fBSET ROLE\fRを使用してロールを変更した場合、その後に実行する\fBSET ROLE\fRコマンドで変更可能なロール群は変更されません。
.SH "例"
.sp
.nf
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
.sp
.fi
.SH "互換性"
.PP
PostgreSQLでは、識別子構文（"rolename"）を使用できます。
しかし、標準SQLではロール名を文字列リテラルとして記述しなければなりません。
SQLでは、トランザクション内でこのコマンドを実行することを許可していません。
この制限の理由がありませんので、PostgreSQLではこの制限はありません。
SESSION、LOCAL修飾子、および、RESET構文はPostgreSQLの拡張です。
.SH "関連項目"
SET SESSION AUTHORIZATION [\fBset_session_authorization\fR(l)]
