PostgreSQL | ロール(ユーザー) ROLE 作成 | ロールのパスワード期限設定(ALTER ROLE)

PostgreSQL に接続するロールの認証に使用するパスワードについては、ロール作成時だけでなく、ロール作成後にも属性を変更してパスワード期限を設定できる。ここでは、ロールのパスワード期限を設定する方法と、パスワードが無効化されたロールを再びパスワード認証できるように設定する方法について説明する。

パスワード期限を設定する

ロール作成時にパスワード期限を設定するには、次のように実行する。

CREATE ROLE name
  WITH LOGIN PASSWORD 'password' VALID UNTIL 'timestamp'

LOGIN および PASSWORD 'password' 属性を設定して作成するロールは、PostgreSQL の接続ロールとして使用できるが、VALID UNTIL 'timestamp' を設定することで、使用するパスワードの期限を timestamp までに設定できる。

また、作成済みロールに対してパスワード期限属性だけを設定する場合は、次のように実行する。

ALTER ROLE name WITH VALID UNTIL 'timestamp'

現在設定されているパスワード期限を timestamp までに設定する。

有効期限は '2020-10-31 20:33:10' のように指定する。指定された日時になった時点からパスワードが無効化される。もし '2020-10-31' のように日付だけを指定した場合は、'2020-10-31 00:00:00' と同じである。

それでは実際に試してみる。現在作成されている mykuma ロールの有効期限を '2020-10-10 06:00:00' に設定する。

devkuma=# alter role mykuma with valid until '2020-10-10 06:00:00';
ALTER ROLE
devkuma=#

mykuma ロールのパスワード期限が設定された。

パスワード期限を設定した後、psql メタコマンド \du を使用して mykuma ロールの属性を表示すると、パスワード期限が設定されていることを確認できる。

devkuma=# \du mykuma
                             롤 목록
 롤 이름 |                   속성                    | 소속 그룹:
---------+-------------------------------------------+------------
 mykuma  | 비밀번호 만료기한: 2020-10-10 06:00:00+09 | {}


devkuma=#

パスワード期限が設定されたロールは、パスワードが期限切れになる前から PostgreSQL に接続していれば、期限の日時になってもその接続はそのまま使用できる。ただし、接続を切断するとパスワード認証に失敗する。

パスワードが無効化された状態で接続を試みると、「psql: 오류: 서버 접속 실패: 치명적오류: 사용자 “mykuma"의 password 인증을 실패했습니다」と表示され、接続に失敗する。

C:\Users\kimkc>psql -U mykuma -d postgres
mykuma 사용자의 암호:
psql: 오류: 서버 접속 실패: 치명적오류:  사용자 "mykuma"의 password 인증을 실패했습니다

C:\Users\kimkc>

パスワード期限設定を解除する

パスワードが期限切れになって無効化された場合、新しいパスワードを設定するだけでは認証できない。再びそのロールでパスワード認証できるようにするには、ALTER ROLE コマンドを使用してパスワード期限設定を解除する必要がある。

それでは実際に試してみる。現在パスワードを使用できない mykuma ロールについてパスワード期限設定を解除するには、現在より後の日時を再指定するか、無期限を意味する 'infinity' を設定する。

postgres=# alter role mykuma with valid until 'infinity';
ALTER ROLE
postgres=#

mykuma ロールのパスワード期限設定が解除された。正確には、パスワード期限が無期限に設定された。

再び psql メタコマンド \du を使用して mykuma ロールの属性を表示すると、パスワード期限が infinity に設定されていることを確認できる。

postgres=# \du mykuma
                      롤 목록
 롤 이름 |            속성             | 소속 그룹:
---------+-----------------------------+------------
 mykuma  | 비밀번호 만료기한: infinity | {}


postgres=#

有効期限設定を変更した後、そのロールで PostgreSQL に接続してみると、問題なくパスワード認証が通り接続できる。

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

postgres=>

ここまで、ロールのパスワード期限を設定する方法と、パスワードが無効化されたロールを再びパスワード認証できるように設定する方法について説明した。