web-dev-qa-db-ja.com

psqlを使用して接続しようとすると、pgbouncerが認証に失敗する

Postgres 9で動作するように最新のpgbouncerを構成しようとしています。正しいパスワードでpsqlを使用してdbに接続できますが、psql -p 6432を使用するとエラーメッセージに接続できません/ psql: ERROR: auth failed

これは私のuserlist.txtファイルが原因である可能性がありますが、よくわかりません。私がチェックしたところ、必要なファイルはすべてPostgresシステムユーザーが完全に所有しています

pgbouncer.ini

[databases]
postgres = Host=localhost port=5433 auth_user=postgres dbname=postgres

[pgbouncer]
pidfile = /usr/local/pgbouncer-1.9.0/pgbouncer.pid
logfile = /usr/local/pgbouncer-1.9.0/log/pgbouncer.log

user = postgres

listen_addr = *
listen_port = 6432

auth_type = md5
auth_file = /usr/local/pgbouncer-1.9.0/etc/userlist.txt

Userlist.txt

"postgres" "md5<MD5 SUM>"

Pgbouncerの起動に使用されるコマンド

./bin/pgbouncer -d etc/pgbouncer.ini

失敗を示すログ出力

2019-08-20 13:46:01.080 16446 LOG C-0x1028ce0: postgres/[email protected]:43286 login attempt: db=postgres user=postgres tls=no
2019-08-20 13:46:01.080 16446 LOG C-0x1028ce0: postgres/[email protected]:43286 closing because: client unexpected eof (age=0)
2019-08-20 13:46:06.980 16446 LOG C-0x1028ce0: postgres/[email protected]:43414 login attempt: db=postgres user=postgres tls=no
2019-08-20 13:46:06.980 16446 LOG C-0x1028ce0: postgres/[email protected]:43414 closing because: auth failed (age=0)
2019-08-20 13:46:06.980 16446 WARNING C-0x1028ce0: postgres/[email protected]:43414 pooler error: auth failed
1
Josh Kirby

PGBouncer(さらに言えばPostgreSQL)のmd5パスワードを作成するには、式は次のとおりです。

"md5" + md5(password + username)

ユーザー名が「admin」、パスワードが「password123」の3つの方法で作成できます...

Linux:

# echo -n "md5"; echo -n "password123admin" | md5sum | awk '{print $1}'
md53f84a3c26198d9b94054ca7a3839366d

マックOS:

➜ echo -n "md5"; md5 -qs "password123admin"                                                                                                                                                                                   
md53f84a3c26198d9b94054ca7a3839366d

Python 2:

>>> import hashlib
>>> print("md5" + hashlib.md5("password123" + "admin").hexdigest())
md53f84a3c26198d9b94054ca7a3839366d

Python 3:

上記と同じですが、バイナリ文字列を使用します...

print("md5" + hashlib.md5(b"password123" + b"admin").hexdigest())

構成ファイル

Pgbouncer.iniのエントリは次のようになります。

auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt

/etc/pgbouncer/userlist.txtの関連エントリは次のようになります。

"admin" "md53f84a3c26198d9b94054ca7a3839366d"

次に、pgbouncerに接続してこれをテストできます

psql -h localhost -p 6432 -U admin

...プロンプトが表示されたら、プレーンテキストバージョンのパスワードを入力します。

2
RCross

問題を解決するために管理されて、私はユーザーリストで私のPostgresパスワードのmd5合計を使用していました。 3つの異なるガイドで見たのでこれを行いましたが、公式ドキュメントを見ると、認証タイプがまだmd5であるときにパスワードをプレーンテキストで入力する必要があることがわかりました。これは今では理にかなっていますが、なぜ異なるサイトの3つの異なるガイドがすべて間違った情報を提供したのかはわかりません。それについてはとても幸せですが、解決しました。

0
Josh Kirby