Для работы через pgBouncer недостаточно завести пользователя в базе, нужно еще его прописать в userlist.txt
Если вы работаете через pgbouncer, то недостаточно просто завести пользователя в базе PostgreSQL. Чтобы пользователь мог подключаться через pgbouncer, его учетные данные должны быть также прописаны в файле userlist.txt
, который указан в конфигурации pgbouncer
в параметре auth_file
.
Почему это нужно?
pgbouncer
выступает прокси между клиентами и базой данных. Он сам проверяет аутентификацию пользователя, не перенаправляя этот процесс на PostgreSQL. Поэтому pgbouncer
должен иметь доступ к данным пользователя, включая его имя и пароль, чтобы сверить их перед созданием соединения.
Как настроить?
- Добавьте пользователя в PostgreSQL (если его еще нет):
12CREATE USER myuser WITH PASSWORD 'mypassword'; - Сгенерируйте MD5-хэш пароля: Пароль для
pgbouncer
должен быть в формате:
12md5<MD5-хэш от строки "passwordusername">myuser
, а пароль —mypassword
:
12echo -n 'mypasswordmyuser' | md5sum
12md5996d4f58b7f22c2b6a6d64f7c792b3a1 - Пропишите учетные данные в
userlist.txt
: Файлuserlist.txt
должен содержать строки вида:
12"myuser" "md5996d4f58b7f22c2b6a6d64f7c792b3a1" - Проверьте конфигурацию
pgbouncer
: Убедитесь, что в конфигеpgbouncer
(pgbouncer.ini
) указан правильный путь к файлуuserlist.txt
:
12auth_file = /etc/pgbouncer/userlist.txt - Перезапустите
pgbouncer
: После внесения изменений вuserlist.txt
необходимо перезапуститьpgbouncer
, чтобы изменения вступили в силу:
12systemctl restart pgbouncer
Частые ошибки
- Несоответствие пароля: Если пароль в базе PostgreSQL и в
userlist.txt
не совпадают (включая формат MD5),pgbouncer
выдаст ошибкуpassword authentication failed
. - Файл
userlist.txt
не найден или неправильно указан: Проверьте путь в параметреauth_file
и убедитесь, что файл доступен для чтенияpgbouncer
. - Синтаксические ошибки в
userlist.txt
: Каждый пользователь должен быть на отдельной строке, и формат должен быть строго соблюден:"username" "md5hash"
.
А если не хочется каждый раз обновлять userlist.txt
вручную?
Если нужно упростить управление пользователями:
- Используйте метод аутентификации
auth_type = trust
, но это отключает проверку паролей, что небезопасно. - Настройте
auth_type = plain
(не рекомендуется для продакшена, так как пароль передается в открытом виде). - Автоматизируйте обновление
userlist.txt
через Ansible или скрипты, синхронизируя его с пользователями в PostgreSQL.
Recommended Posts
Пояснение конфига для Pgbouncer
12.02.2024