PostgreSQL で postgres ユーザ(root ユーザ)のパスワードがわからなくなった時

postgres ユーザ(ロール)

PostgreSQL では postgres というユーザ(ロール)がいわゆる root ユーザになりますが、こいつのパスワードを忘れたときの対処法です。

結論

1. pg_hba.conf を編集して認証をスキップさせる

Ubuntu 16.04 LTS ならば /etc/postgresql/10/main にある pg_hba.conf というファイルを編集して、認証をスキップさせます。現在有効になっている行をすべてコメントアウトして以下の行を付け加えればいいでしょう*1。許可するアドレスのところ*2は適宜変更してください。

host all all 127.0.0.0/24 trust

2. PostgreSQL を再起動する

PostgreSQL を再起動させて上記の設定を適用させます。

3. PostgreSQL にログインする

PostgreSQL にログインしましょう。パスワード無しでログインできるはずです。

$ psql -U postgres -h 127.0.0.1
psql (10.4 (Ubuntu 10.4-2.pgdg16.04+1))
SSL 接続 (プロトコル: TLSv1.2、暗号化方式: ECDHE-RSA-AES256-GCM-SHA384、ビット長: 256、圧縮: オフ)
"help" でヘルプを表示します。

postgres=#

4. パスワードを設定する

psql のプロンプトから \password と入力してパスワードを再設定します。設定したらログアウトします。

postgres=# \password
新しいパスワードを入力してください:
もう一度入力してください:
postgres=# \q

5. pg_hba.conf を元に戻し PostgreSQL を再起動する

「1.」で編集した pg_hba.conf を元に戻して PostgreSQL を再起動します。

6. 設定したパスワードでログインできるかを確認

新しく設定し直したパスワードでログインできるかを確認します。

$ psql -U postgres -h 127.0.0.1
ユーザー postgres のパスワード:
psql (10.4 (Ubuntu 10.4-2.pgdg16.04+1))
SSL 接続 (プロトコル: TLSv1.2、暗号化方式: ECDHE-RSA-AES256-GCM-SHA384、ビット長: 256、圧縮: オフ)
"help" でヘルプを表示します。

postgres=#

*1:あくまで一時的な設定であること前提です

*2:127.0.0.0/24

Powered by はてなブログ