PostgreSQL 8.1以降は、ユーザーとグループでなく、ロールでアクセス管理を行うようになっています。 そのためパスワードもロールで設定します。
パスワード設定
パスワードを設定したり変更したりする場合、以下のようになります。
ALTER ROLE [ロール名] [WITH] PASSWORD '[パスワード]';パスワードを"testpass"に設定する場合、以下を実行します。
postgres=# ALTER ROLE testdb WITH PASSWORD 'testpass';パスワードを削除する場合、以下を実行します。
postgres=# ALTER ROLE testdb WITH PASSWORD NULL;
パスワード有効期限の設定
パスワードの有効期限を設定する場合、以下のようになります。
ALTER ROLE [ロール名] VALID UNTIL '[期限]';
-
有効期限を無効(無期限)に設定
期限の部分に"infinity"とすると有効期限が無効(無期限)になります。
postgres=# ALTER ROLE testdb VALID UNTIL 'infinity';pg_userで確認すると、"valuntil"に”infinity"と表示されます。
postgres=# select * from pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+----------- postgres | 10 | t | t | t | t | ******** | | testdb | 16679 | t | f | f | f | ******** | infinity | (2 行)
有効期限に日本時間を設定
パスワードの期限を日本時間2017年6月7日22時30分に設定する場合、以下を実行します。 日本時間の場合は、UTC + 9 となるので、日時のあとに " + 9"を追加します。
postgres=# ALTER ROLE testdb VALID UNTIL '2017-6-7 22:30:00 + 9';pg_userで確認すると、以下のように"valuntil"に設定した期限が表示されます。
postgres=# select * from pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+------------------------+----------- postgres | 10 | t | t | t | t | ******** | | testdb | 16679 | t | f | f | f | ******** | 2017-06-07 22:30:00+09 | (2 行)パスワードの期限が過ぎると、psqlコマンドでは以下のようになり、ログインできません。
$ psql -U testdb ユーザ testdb のパスワード: psql: FATAL: ユーザ"testdb"のパスワード認証に失敗しました