ロールのパスワードの有効期限を設定する
PortgreSQL の接続時にロールの認証に使用するパスワードについて、ロールの作成時やロールを作成したあとでも属性を変更することでパスワードの有効期限を設定することができます。ここでは PostgreSQL でロールのパスワードの有効期限を設定する方法、そしてパスワードが無効になったロールを再びパスワード認証が行えるようにする設定方法について解説します。
(Last modified: )
パスワードの有効期限を設定する
ロールの作成する時にパスワードの有効期限を設定するには次のように実行します。
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' までに設定します。
有効期限は '2019-06-01 13:25:20' のように指定します。指定した日時になったときからパスワードが無効となります。もし '2019-06-01' のように日付だけで指定した場合は '2019-06-01 00:00:00' と同じです。
-- --
それでは実際に試してみます。現在作成済みの momo ロールの有効期限を ’2019-05-21 05:00:00' に設定します。
alter role momo with valid until '2019-05-21 05:00:00';
momo ロールのパスワードの有効期限が設定されました。
パスワードの有効期限を設定したあとで、 psql メタコマンドの \du を使って momo ロールの属性を表示してみると、パスワードの有効期限が設定されていることが確認できます。
\du momo
パスワードの有効期限が設定ロールは、パスワードが無効になる前に PostgreSQL に接続していた場合はパスワードが無効になる日時になっても接続はそのまま有効でした。ただし接続を一度切ってしまうとパスワード認証で失敗します。
パスワードが無効になった状態で接続を行おうとすると psql: FATAL: ユーザ"momo"のパスワード認証に失敗しました と表示されて接続に失敗します。
パスワードの有効期限に関する設定を取り消す
パスワードの有効期限が切れて無効になったしまった場合、新しいパスワードを設定しても認証はできません。再び該当のロールがパスワード認証をできるようにするには、パスワードの有効期限に関する設定を ALTER ROLE コマンドを使って取り消す必要があります。
それでは実際に試してみます。パスワードが現在無効になっている momo ロールに関してパスワードの有効期限に関する設定を取り消すには、有効期限として現在よりも先の日時を改めて指定するか、無期限を意味する 'infinity' を設定してください。
alter role momo with valid until 'infinity';
momo ロールのパスワードの有効期限に関する設定が取り消されました(実際にはパスワードの有効期限が無期限に設定されました)。
あらためて psql メタコマンドの \du を使って momo ロールの属性を表示してみると、パスワードの有効期限が 'infinity' に設定されていることが確認できます。
\du momo
有効期限の設定変更後に、該当のロールで PostgreSQL へ接続を行ってみると、問題なくパスワード認証が通って接続を行うことができました。
psql -U momo -d postgres
-- --
ロールのパスワードの有効期限を設定する方法、そしてパスワードが無効になったロールを再びパスワード認証が行えるようにする設定方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。