[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER ROLE

ALTER ROLE — データベースロールを変更する

概要

ALTER ROLE role_specification [ WITH ] option [ ... ]


ここでoptionは以下の通りです。

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    | VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL


ここでrole_specificationは以下の通りです。

    role_name
  | CURRENT_USER
  | SESSION_USER

説明

ALTER ROLEPostgreSQLのロールの属性を変更します。

このコマンドの最初の構文では、CREATE ROLEで指定可能な多くのロール属性を変更することができます。 (指定し得るすべての属性に対応していますが、メンバ資格の追加および削除用のオプションはありません。 追加および削除にはGRANTREVOKEを使用してください。) このコマンドで指定しなかった属性は以前の設定のまま残ります。 データベーススーパーユーザはすべてのロールのすべての属性を変更することができます。 CREATEROLE権限を持つロールは、スーパーユーザおよびレプリケーション以外のロールに対してすべての属性を変更することができます。 通常のロールは自身のパスワードのみを変更することができます。

2番目の構文ではロールの名前を変更することができます。 データベーススーパーユーザはすべてのロールの名前を変更できます。 CREATEROLE権限を持つロールはスーパーユーザ以外のロールに対してその名前を変更できます。 現在のセッションユーザの名前を変更することはできません。 (必要ならば別のユーザで接続してください)。 MD5暗号化パスワードではロール名を暗号用のソルトとして使用しますので、パスワードがMD5で暗号化されている場合、ロール名を変更するとパスワードは空になります。

残りの構文では、全データベース用、またはIN DATABASE句が指定された場合はそのデータベース用のセッションに対するロールの設定変数についてのセッションデフォルトを変更します。 ロール名の代わりにALLを指定すると、すべてのロール用の設定を変更します。 ALLIN DATABASEを一緒に使用することは実質ALTER DATABASE ... SET ...コマンドの使用と同じです。

その後、ロールが新しいセッションを始めると常に、postgresql.conf内の設定やpostgresコマンドラインから受け取った設定よりも優先されて、指定された値がセッションのデフォルトとなります。 これはログイン時のみに発生します。 SET ROLEまたはSET SESSION AUTHORIZATIONを実行しても新しい設定値は設定されません。 全データベースに対する設定よりも、ロールに割り当てたデータベース固有の設定が優先します。 特定のデータベースまたは特定のロールに対する設定は、すべてのロールに対する設定よりも優先します。

スーパーユーザはすべてのユーザのセッションのデフォルトを変更することができます。 CREATEROLE権限を持つロールはスーパーユーザ以外のロールのデフォルトを変更することができます。 通常のロールは自身のデフォルトのみを設定することができます。 設定変数の中にはこの方法で変更できないものがあります。 また、スーパーユーザがこのコマンドを発行した時にのみ変更できるものもあります。 スーパーユーザのみがすべてのデータベースにおけるすべてのロール用の設定を変更することができます。

パラメータ

name

属性を変更するロールの名前です。

CURRENT_USER

明示的にロールを指定する代わりに現在のユーザを変更します。

SESSION_USER

明示的にロールを指定する代わりに現在のセッションユーザを変更します。

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD 'password'
PASSWORD NULL
VALID UNTIL 'timestamp'

これらの句は、元々CREATE ROLEで設定された属性を変更します。 詳細はCREATE ROLEのマニュアルページを参照してください。

new_name

ロールの新しい名前です。

database_name

設定変数を設定する対象のデータベースの名前です。

configuration_parameter
value

指定した設定パラメータに対して、ロールのセッションデフォルトを指定した値に設定します。 valueDEFAULT、またはRESETが使用されていた場合、ロール固有の変数設定は削除され、新しいセッションではロールはシステム全体のデフォルト設定を継承します。 すべてのロール固有の設定を削除するにはRESET ALLを使用してください。 SET FROM CURRENTはセッションのパラメータ値をロール固有の値として保管します。 IN DATABASEが指定された場合、設定パラメータは指定されたロールとデータベースのみで設定または削除されます。

ロール固有の変数設定はログイン時のみに影響を与えます。 SET ROLEおよびSET SESSION AUTHORIZATIONはロール固有の変数設定を処理しません。

取り得るパラメータ名とその値に関する詳細はSETおよび第19章を参照してください。

注釈

新規にロールを追加するにはCREATE ROLEを使用してください。 また、ロールを削除するにはDROP ROLEを使用してください。

ALTER ROLEではロールのメンバ資格を変更できません。 メンバ資格の変更にはGRANTおよびREVOKEを使用してください。

このコマンドで暗号化しないパスワードを指定するときには注意しなければなりません。 パスワードはサーバに平文で送信されます。 クライアントのコマンド履歴やサーバのログにこれが残ってしまうかもしれません。 psqlには\passwordコマンドがあります。 これを使用してロールのパスワードを平文のパスワードをさらすことなく変更することができます。

ロールではなくデータベースにセッションのデフォルトを結びつけることもできます。 ALTER DATABASEを参照してください。 競合する場合、データベースとロールの組み合わせに固有な設定はロール固有の設定よりも優先し、ロール固有の設定はデータベース固有の設定よりも優先します。

ロールのパスワードを変更します。

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

ロールのパスワードを削除します。

ALTER ROLE davide WITH PASSWORD NULL;

パスワードの有効期限を変更します。 以下では、2015年5月4日正午(ただしUTCより1時間進んだタイムゾーンを使用)にパスワードが無効となるように変更しています。

ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';

パスワードの有効期限を無効にします。

ALTER ROLE fred VALID UNTIL 'infinity';

ロールに他のロールの作成権限と新しいデータベースの作成権限を与えます。

ALTER ROLE miriam CREATEROLE CREATEDB;

ロールにmaintenance_work_memパラメータ用のデフォルトとは異なる設定を与えます。

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

ロールにデータベース固有のclient_min_messagesパラメータ用のデフォルトとは異なる設定を与えます。

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

互換性

ALTER ROLE文はPostgreSQLの拡張です。

関連項目

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET