Postgreでパスワードがわからんぞ!
なんかpeer認証エラーなるものがでてるぞ!
ってときに対応した内容をまとめたメモです。
環境
- Vagrant 2.1.2
- CentOS 7.5
- PostgreSQL 11.7
Postgresにログインできない!?
Postgresをインストールしてログインしてみようとしたらできない。peer認証ってなんやねん。
$ psql -U postgres
psql: FATAL: ユーザ "postgres" で対向(peer)認証に失敗しました
権限ファイルの書き換え
調べてみたら、権限ファイルがおかしいとのこと。
pg_hba.conf
というファイルを探しましょう。
私の環境では、下記の場所にありました。
/var/lib/pgsql/11/data/pg_hba.conf
このファイルを編集します。
編集する際はsu(スーパーユーザー)でログインするか、sudoコマンドで編集してください。
するとファイルの下部にこんな記述があるはずです。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
このpeer
という表記をpassword
に変更します。こんな感じ。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all password
そしたらポスグレを再起動します。
$ sudo /etc/rc.d/init.d/postgresql-9.3 reload
や
$ /usr/local/bin/pg_ctl reload
でPostgresが再起動されるはずなんですが、私の場合はうまくいかず、Vagrantから再起動しました。。
パスワードを忘れた!
ほいなら、あとはログインするだけです。
$ psql -U postgres
ユーザ postgres のパスワード:
psql: FATAL: ユーザ"postgres"のパスワード認証に失敗しました
………うん。パスワードがわからん。。。くそう。
パスワードリセット
パスワードがわからないとなんともできないので、パスワードをリセットします。
さっきの権限ファイル(pg_hba.conf
)を今度はtrust
に変更します。で、また再起動。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
そうすると、こんな感じでパスワードなしでpostgreログインできます。
$ psql -U postgres
psql (11.7)
"help" でヘルプを表示します。
\password
コマンドで、パスワードを変更します。
postgres=# \password
新しいパスワードを入力してください:
もう一度入力してください:
そうしたら、Postgreを抜けて、またpg_hba.conf
ファイルをパスワードありの設定に戻して、再起動です。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all password
そしたら、ちゃんとパスワード聞かれて、ポスグレにログインできました。
$ psql -U postgres
ユーザ postgres のパスワード:
psql (11.7)
"help" でヘルプを表示します。
postgres=#
意外と面倒だった。