J'essaie de configurer le dernier pgbouncer à travailler avec Postgres 9. Je peux me connecter à mon DB à l'aide de psql
avec le bon mot de passe, mais quand j'utilise psql -p 6432
Je ne peux pas me connecter avec le message d'erreur de psql: ERROR: auth failed
Cela semble que cela pourrait être causé par mon fichier userlist.txt, mais je ne suis pas sûr de cela. J'ai vérifié et tous les fichiers requis appartiennent pleinement par l'utilisateur du système 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>"
Commande utilisée pour commencer pgbouncer
./bin/pgbouncer -d etc/pgbouncer.ini
Sortie de journal montrant l'échec
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
Pour créer un mot de passe MD5 pour PGBouncer (ou PostgreSQL pour cette affaire), la formule est la suivante:
"md5" + md5(password + username)
Voici 3 façons que vous pouvez en créer un, où le nom d'utilisateur est "admin" et le mot de passe est "mot de passe123" ...
Linux:
# echo -n "md5"; echo -n "password123admin" | md5sum | awk '{print $1}'
md53f84a3c26198d9b94054ca7a3839366d
MacOS:
➜ echo -n "md5"; md5 -qs "password123admin"
md53f84a3c26198d9b94054ca7a3839366d
Python 2:
>>> import hashlib
>>> print("md5" + hashlib.md5("password123" + "admin").hexdigest())
md53f84a3c26198d9b94054ca7a3839366d
Python 3:
Comme ci-dessus, mais utilisez des cordes binaires ...
print("md5" + hashlib.md5(b"password123" + b"admin").hexdigest())
Fichiers de configuration
L'entrée dans votre pgbouncer.ini devrait être:
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
et l'entrée pertinente dans /etc/pgbouncer/userlist.txt devrait être:
"admin" "md53f84a3c26198d9b94054ca7a3839366d"
Vous pouvez ensuite tester cela en vous connectant à pgbouncer
psql -h localhost -p 6432 -U admin
... puis en tapant la version en plainte de votre mot de passe lorsque vous y êtes invité.
Géré pour résoudre le problème, j'utilisais une somme MD5 de mon mot de passe Postgres dans la liste des utilisateurs. Je l'ai fait parce que je l'ai vu dans 3 guides différents, mais en regardant les documents officiels, j'ai vu que vous avez besoin de mettre votre mot de passe en texte brut tout en ayant le type d'authentification toujours MD5. Cela a du sens maintenant, mais pourquoi 3 guides différents sur différents sites ont tous donné de mauvaises informations que je ne suis pas sûre. Je suis résolu si heureux à ce sujet.