haiju's 開発メモ

開発に必要な情報を自分用にメモ

MX Linux19でpeer認証の関係(PostgreSQL “対向(peer)認証に失敗しました” エラー)でpsqlログインできない時の対処法

Windows文字コードロケール周りでPostgreSQLが地獄なので、Linuxにすれば

違うかなと思っていたら、OSのパッケージマネージャ、たとえばMXなどDebian

ディストリビューションでapt install postgresqlでインストールした場合は、

データベースクラスタの作成(initdb)までインストールの際、設定ファイル

/etc/postgresql/11(version)/main/pd_hba.conf まで作成するが、Windowsインストー

ラの時みたいに明示的にインストールウィザード内でパスワードを設定しなかった

ので、デフォルトのスーパーユーザpostgresのパスワードが分からなくて、いろいろ

試していたらタイトルのエラーが発生しログインできなかったので、調べてみた

ことをまとめてみる(Φω|

[エラーの原因]

設定ファイル /etc/postgresql/11/main/pg_hba.conf のMETHOD(auth_method)が

peerになっている。Peer認証ではUNIXのユーザ名と一致していないとエラーになる。

(Peer認証はカーネルからシステムのユーザ名を取得し、PostgreSQLデータベース

ユーザと同一である場合のみ接続が許可される仕組み)

[解決策]

1. Peer認証で接続するためにpostgresユーザ(OS)でログインできるように、

 インストール時に作成されるユーザ postgresにパスワードを設定。

$ sudo passwd postgres

f:id:haiju:20200122194915p:plain

2. その後、postgresユーザになりpsqlに接続。

f:id:haiju:20200122194933p:plain

3. psglに接続後、下記SQLクエリーを実行。

postgres=# ALTER USER postgres with encrypted password '1で設定したパスワード';
ALTER ROLE
postgres=#

4. /etc/postgres/11/main/pg_hba.conf の下記設定行のpeerをmd5に編集し保存。

(ex) before

local all  postgres   peer

(ex)after

local all postgres   md5

5. PostgreSQLを再起動。

f:id:haiju:20200122195204p:plain

6. 設定したパスワードで再度、psqlに接続。

$ psql -U postgres -h localhost -W

※エラーが発生せず、ログインできてプロンプトが出ればOK。

[参考サイト]

www.utsushiiro.jp

qiita.com

qiita.com