PostgreSQL | ロール(ユーザー) ROLE 作成 | ロール属性と名前の変更(ALTER ROLE)

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

ロールの属性を変更する

ロールの属性を変更するには 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 に接続し、作成済みロール superkuma の属性を変更する。superkuma の現在の属性は次のようになっている。

devkuma=# \du superkuma
                    롤 목록
  롤 이름  |         속성         | 소속 그룹:
-----------+----------------------+------------
 superkuma | 롤 만들기, DB 만들기 | {}


devkuma=#

CREATEDB および CREATEROLE 権限が設定されている。

では CREATEROLE 権限を削除し、CONNECTION LIMIT に 3 を設定する。次のように実行する。

devkuma=# alter role superkuma with nocreaterole connection limit 3;
ALTER ROLE
devkuma=#

superkuma ロールの属性が変更された。もう一度 superkuma の属性を確認する。

devkuma=# \du superkuma
              롤 목록
  롤 이름  |   속성    | 소속 그룹:
-----------+-----------+------------
 superkuma | DB 만들기+| {}
           | 3개 연결  |


devkuma=#

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

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

次に、スーパーユーザーでも CREATEROLE 権限もない一般ロールが、自分のパスワードを変更してみる。

パスワードを変更するロールは kuma とする。コマンドプロンプトから kuma でデータベースに接続する。接続先データベースは postgres とした。

C:\Users\kimkc>psql -U kuma -d postgres
kuma 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=>

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

postgres=> alter role session_user with password 'mybear';
ALTER ROLE
postgres=>

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

変更権限なしで属性を変更しようとする場合

パスワード変更以外の属性変更は、スーパーユーザーまたは CREATEROLE 権限を持つロールだけが実行できる。権限なしで属性を変更するとどうなるか確認する。

一般ロール kuma でデータベースに接続する。接続先データベースは postgres とした。

C:\Users\kimkc>psql -U kuma -d postgres
kuma 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=>

kuma で接続した状態で、kuma ロールの属性を変更してみる。次のように実行する。

postgres=> alter role kuma with createrole;
오류:  권한 없음
postgres=>

試してみると「오류: 권한 없음」と表示された。このように、ロールの属性を変更するには必要な権限を持つロールでなければならない。

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