ALTER ROLE — データベースロールを変更する
ALTER ROLErole_specification[ WITH ]option[ ... ] ここでoptionは以下の通りです。 SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' ALTER ROLEnameRENAME TOnew_nameALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameter{ TO | = } {value| DEFAULT } ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameterFROM CURRENT ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESETconfiguration_parameterALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESET ALL ここでrole_specificationは以下の通りです。role_name| CURRENT_USER | SESSION_USER
ALTER ROLEはPostgreSQLのロールの属性を変更します。
このコマンドの最初の構文では、CREATE ROLEで指定可能な多くのロール属性を変更することができます。
(指定し得るすべての属性に対応していますが、メンバ資格の追加および削除用のオプションはありません。
追加および削除にはGRANTとREVOKEを使用してください。)
このコマンドで指定しなかった属性は以前の設定のまま残ります。
データベーススーパーユーザはすべてのロールのすべての属性を変更することができます。
CREATEROLE権限を持つロールは、スーパーユーザおよびレプリケーション以外のロールに対してすべての属性を変更することができます。
通常のロールは自身のパスワードのみを変更することができます。
2番目の構文ではロールの名前を変更することができます。
データベーススーパーユーザはすべてのロールの名前を変更できます。
CREATEROLE権限を持つロールはスーパーユーザ以外のロールに対してその名前を変更できます。
現在のセッションユーザの名前を変更することはできません。
(必要ならば別のユーザで接続してください)。
MD5暗号化パスワードではロール名を暗号用のソルトとして使用しますので、パスワードがMD5で暗号化されている場合、ロール名を変更するとパスワードは空になります。
残りの構文では、全データベース用、またはIN DATABASE句が指定された場合はそのデータベース用のセッションに対するロールの設定変数についてのセッションデフォルトを変更します。
ロール名の代わりにALLを指定すると、すべてのロール用の設定を変更します。
ALLとIN DATABASEを一緒に使用することは実質ALTER DATABASE ... SET ...コマンドの使用と同じです。
その後、ロールが新しいセッションを始めると常に、postgresql.conf内の設定やpostgresコマンドラインから受け取った設定よりも優先されて、指定された値がセッションのデフォルトとなります。
これはログイン時のみに発生します。
SET ROLEまたはSET SESSION AUTHORIZATIONを実行しても新しい設定値は設定されません。
全データベースに対する設定よりも、ロールに割り当てたデータベース固有の設定が優先します。
特定のデータベースまたは特定のロールに対する設定は、すべてのロールに対する設定よりも優先します。
スーパーユーザはすべてのユーザのセッションのデフォルトを変更することができます。
CREATEROLE権限を持つロールはスーパーユーザ以外のロールのデフォルトを変更することができます。
通常のロールは自身のデフォルトのみを設定することができます。
設定変数の中にはこの方法で変更できないものがあります。
また、スーパーユーザがこのコマンドを発行した時にのみ変更できるものもあります。
スーパーユーザのみがすべてのデータベースにおけるすべてのロール用の設定を変更することができます。
name属性を変更するロールの名前です。
CURRENT_USER明示的にロールを指定する代わりに現在のユーザを変更します。
SESSION_USER明示的にロールを指定する代わりに現在のセッションユーザを変更します。
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMIT connlimitENCRYPTED ] PASSWORD 'password'PASSWORD NULLVALID UNTIL 'timestamp'
これらの句は、元々CREATE ROLEで設定された属性を変更します。
詳細はCREATE ROLEのマニュアルページを参照してください。
new_nameロールの新しい名前です。
database_name設定変数を設定する対象のデータベースの名前です。
configuration_parametervalue
指定した設定パラメータに対して、ロールのセッションデフォルトを指定した値に設定します。
valueがDEFAULT、またはRESETが使用されていた場合、ロール固有の変数設定は削除され、新しいセッションではロールはシステム全体のデフォルト設定を継承します。
すべてのロール固有の設定を削除するにはRESET ALLを使用してください。
SET FROM CURRENTはセッションのパラメータ値をロール固有の値として保管します。
IN DATABASEが指定された場合、設定パラメータは指定されたロールとデータベースのみで設定または削除されます。
ロール固有の変数設定はログイン時のみに影響を与えます。 SET ROLEおよびSET SESSION AUTHORIZATIONはロール固有の変数設定を処理しません。
新規にロールを追加するには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の拡張です。