IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Для работы через pgBouncer недостаточно завести пользователя в базе, нужно еще его прописать в userlist.txt

Если вы работаете через pgbouncer, то недостаточно просто завести пользователя в базе PostgreSQL. Чтобы пользователь мог подключаться через pgbouncer, его учетные данные должны быть также прописаны в файле userlist.txt, который указан в конфигурации pgbouncer в параметре auth_file.


Почему это нужно?

pgbouncer выступает прокси между клиентами и базой данных. Он сам проверяет аутентификацию пользователя, не перенаправляя этот процесс на PostgreSQL. Поэтому pgbouncer должен иметь доступ к данным пользователя, включая его имя и пароль, чтобы сверить их перед созданием соединения.


Как настроить?

  1. Добавьте пользователя в PostgreSQL (если его еще нет):
     
  2. Сгенерируйте MD5-хэш пароля: Пароль для pgbouncer должен быть в формате:
    Например, если имя пользователя — myuser, а пароль — mypassword:
    Результат будет выглядеть, например, так:
     
  3. Пропишите учетные данные в userlist.txt: Файл userlist.txt должен содержать строки вида:
     
  4. Проверьте конфигурацию pgbouncer: Убедитесь, что в конфиге pgbouncer (pgbouncer.ini) указан правильный путь к файлу userlist.txt:
     
  5. Перезапустите pgbouncer: После внесения изменений в userlist.txt необходимо перезапустить pgbouncer, чтобы изменения вступили в силу:
     

Частые ошибки

  1. Несоответствие пароля: Если пароль в базе PostgreSQL и в userlist.txt не совпадают (включая формат MD5), pgbouncer выдаст ошибку password authentication failed.
  2. Файл userlist.txt не найден или неправильно указан: Проверьте путь в параметре auth_file и убедитесь, что файл доступен для чтения pgbouncer.
  3. Синтаксические ошибки в userlist.txt: Каждый пользователь должен быть на отдельной строке, и формат должен быть строго соблюден: "username" "md5hash".

А если не хочется каждый раз обновлять userlist.txt вручную?

Если нужно упростить управление пользователями:

  • Используйте метод аутентификации auth_type = trust, но это отключает проверку паролей, что небезопасно.
  • Настройте auth_type = plain (не рекомендуется для продакшена, так как пароль передается в открытом виде).
  • Автоматизируйте обновление userlist.txt через Ansible или скрипты, синхронизируя его с пользователями в PostgreSQL.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *