Для работы через 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
SKIP LOCKED в PostgreSQL
27.08.2024
Transactional Outbox таблица PostgreSQL
23.04.2024
