ロールの属性を変更する(ALTER ROLE)

ALTER ROLE コマンドを使うことで作成済みのロールに対して属性を変更することができます。ロールの属性とは、ロールの作成時に設定したスーパーユーザーかどうかや、データベースやロールの作成権限があるかどうかなどです。ここでは PostgreSQL でロールの属性を変更する方法について解説します。

※ ALTER ROLE コマンドを使ってロールの名前を変更する方法については「ロールの名前を変更する(ALTER ROLE)」を参照されてください。

(Last modified: )

ロールの属性を変更する

ロールの属性を変更するには ALTER ROLE コマンドを使用します。書式は次の通りです。

ALTER ROLE role_name [ WITH ] option [ ... ]

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

対象のロール( role_name )の属性を変更します。変更したい属性に対して値を設定してください。設定されなかった属性は元のままとなります。ロール名を指定する代わりに、現在のユーザーを表す CURRENT_USER や現在のセッションユーザーを表す SESSION_USER を指定することもできます。

ロールを作成する時に使用した CREATE ROLE コマンドで設定可能な項目は ALTER ROLE コマンドで変更が可能です。ただしロールをグループとして使用する場合の設定項目については別のコマンドを使用します。

スーパーユーザーはすべてのロールの属性を変更可能です。 CREATEROLE の権限を持つロールはスーパーユーザーとレプリケーション以外のロールの属性を変更できます。その他のロールは自分自身のパスワードを変更することができます。

-- --

それでは実際に試してみます。スーパーユーザーである postgres で PostgreSQL に接続し、作成済みのロール momo の属性を変更します。 momo の属性は現在次のようになっています。

\du momo

ロールの属性を変更する(1)

CREATEDB と CREATEROLE の権限が設定されています。

それでは CREATEROLE の権限を削除し、CONNECTION LIMIT に 3 を設定してみます。次のように実行してください。

alter role momo with nocreaterole connection limit 3;

ロールの属性を変更する(2)

momo ロールの属性が変更されました。それではあらためて momo の属性を確認してみます。

ロールの属性を変更する(3)

CREATEROLE の権限が削除されて、最大同時接続数が 3 に設定されていることが確認できました。

一般ロールが自分の接続用パスワードを変更する

次にスーパーユーザーや CREATEROLE の権限を持たない一般のロールが自分自身のパスワードを変更してみます。

パスワードを変更するロールは saru で行います。コマンドプロンプトから saru でデータベースに接続してください(接続するデータベースは postgres にしました)。

psql -U saru -d postgres;

一般ロールが自分の接続用パスワードを変更する(1)

ALTER ROLE コマンドを使ってパスワードを変更します。今回はロール名を指定する代わりに、現在の接続を行ったロールを表す SESSION_USER を代わりに指定してみます。次のように実行してください。

alter role session_user with password 'ape';

一般ロールが自分の接続用パスワードを変更する(2)

現在の接続を開始した時のロールである saru の接続用パスワードを新しい値に変更しました。

変更する権限がない属性の変更を行った場合

パスワードの変更以外の属性の変更はスーパーユーザーまたは CREATEROLE の権限を持つロールしか行うことができません。実際に行う権限がない属性の変更を行った場合にどうなるのかを確認しておきます。

それでは一般ロールの saru でデータベースに接続してください(接続するデータベースは postgres にしました)。

psql -U saru -d postgres;

変更する権限がない属性の変更を行った場合(1)

saru で接続した状態で momo ロールの属性を変更してみます。次のように実行してください。

alter role momo with createrole;

変更する権限がない属性の変更を行った場合(2)

実行してみてみると ERROR: 権限がありません と表示されました。このようにロールの属性を変更するには必要となる権限があるロールしか行うことができません。

-- --

ALTER ROLE コマンドを使って作成済みのロールの属性を変更する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。