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