【SQL実践|実務向け】PostgreSQLでロールのパスワード有効期限を管理する実務テクニック

1. 導入

データベースのセキュリティを確保する上で、パスワードの使い回し防止や、退職者アカウントの放置を防ぐことは非常に重要です。PostgreSQLでは、ロールごとにパスワードの有効期限を設定することができます。本記事では、この機能を活用してセキュリティレベルを向上させる具体的な方法と、運用上知っておくべき注意点を解説します。

2. 基礎知識

PostgreSQLのロール管理において、VALID UNTIL句を用いることで、そのロールがパスワード認証を通過できる期間を制限できます。期限が過ぎると、そのロールは認証エラーとなり、データベースへの接続ができなくなります。これは特に、外部ベンダーへの一時的なアクセス権限付与や、セキュリティポリシーで定期的なパスワード変更が義務付けられている環境で非常に有用な仕組みです。

3. 実装/解決策

有効期限の設定には、新規作成時の指定と、既存ロールへの設定変更の2パターンがあります。いずれもALTER ROLEコマンドを活用して制御します。

4. サンプルプログラム

以下のSQLは、現場での運用を想定した実行例です。psqlなどで実行して動作を確認してください。

— ロール作成時に有効期限を「2025年12月31日 23:59:59」に設定する例
CREATE ROLE app_user WITH LOGIN PASSWORD ‘secure_pass123’ VALID UNTIL ‘2025-12-31 23:59:59’;

— 既存ロールの有効期限を更新する例
ALTER ROLE app_user WITH VALID UNTIL ‘2026-06-01 00:00:00’;

— 有効期限の設定を確認するコマンド(psql用)
\du app_user

— 期限を無期限に戻す(無効化する)例
— ‘infinity’を指定することで、期限による制限を解除できます
ALTER ROLE app_user WITH VALID UNTIL ‘infinity’;

5. 応用・注意点

現場で運用する際に、以下の点に注意してください。

1. 既存の接続セッションへの影響
パスワードの有効期限が切れた瞬間に、現在確立されているセッションが強制切断されるわけではありません。期限切れ後に接続を切断し、再度接続を試みたタイミングで認証エラーが発生します。

2. 期限切れ後の復旧手順
期限が切れてログインできなくなった場合、管理者がALTER ROLE … VALID UNTIL ‘infinity’を実行して制限を解除するか、未来の日付に再設定する必要があります。パスワードを変更するだけでは認証エラーは解消されないため、トラブルシューティング時には必ず有効期限の状態をチェックしてください。

3. 監視の自動化
有効期限を管理する際は、期限が近づいているロールを定期的にクエリ(pg_rolesシステムカタログを参照)で抽出し、管理者に通知するスクリプトを準備しておくことを強く推奨します。放置すると予期せぬ接続障害の原因となります。

コメント

タイトルとURLをコピーしました