1. パスワード設定
    • パスワード有効期限の設定

    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"のパスワード認証に失敗しました