← Назад к вопросам

Как шифруются пароли в PgBouncer

2.0 Middle🔥 161 комментариев
#Базы данных#Безопасность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Шифрование паролей в PgBouncer

В PgBouncer пароли шифруются с использованием механизма SCRAM (Salted Challenge Response Authentication Mechanism) — это современный и безопасный протокол аутентификации, который пришёл на смену устаревшему MD5. PgBouncer, выступая в роли прокси-сервера между клиентами и PostgreSQL, поддерживает несколько методов аутентификации, но для шифрования паролей в своей конфигурации он использует хеширование по типу PostgreSQL.

Основные механизмы

  1. SCRAM-SHA-256: Наиболее безопасный метод. Пароль никогда не передаётся в открытом виде, используется соль (salt) и множество итераций хеширования, что защищает от перебора и атак по словарю.
  2. MD5: Устаревший, но поддерживается для обратной совместимости. PgBouncer хранит хеш MD5, но для подключения к PostgreSQL может использовать как MD5, так и SCRAM, в зависимости от настроек сервера.
  3. Plaintext: Пароль передаётся в открытом виде, используется только при подключении через SSL/TLS или в доверенных сетях.

Конфигурация шифрования

Пароли пользователей PgBouncer задаются в файле userlist.txt или динамически через SQL. В userlist.txt пароли хранятся в виде хешей, аналогичных тем, что используются в PostgreSQL.

Пример userlist.txt

"user1" "scram-sha-256|ENCODED_PASSWORD_HASH"
"user2" "md5|ENCODED_MD5_HASH"

Здесь: -RANDOM_SALT` — случайная соль.

  • STORED_KEY и SERVER_KEY — производные ключи, используемые в процессе аутентификации.

Как создаётся хеш для SCRAM

Хеш для SCRAM-SHA-256 можно сгенерировать с помощью утилиты pgBouncer или через PostgreSQL.

Использование pgBouncer

pgbouncer -M -p ваш_пароль

Эта команда сгенерирует строку вида scram-sha-256|..., которую можно поместить в userlist.txt.

Использование PostgreSQL

SELECT pg_catalog.scram_build('ваш_пароль');

Процесс аутентификации с SCRAM

  1. Клиент подключается к PgBouncer, отправляет имя пользователя.
  2. PgBouncer находит в userlist.txt хеш и отправляет клиенту соль и количество итераций.
  3. Клиент вычисляет доказательство знания пароля, используя пароль, соль и итерации.
  4. PgBouncer проверяет доказательство, сверяя с хранимым ключом.
  5. При успехе PgBouncer выполняет аналогичный процесс с PostgreSQL, если сервер требует SCRAM.

Важные моменты

We can choose between unidirectional TLS and mutual TLS. Unidirectional is for internal communication where we just encrypt the traffic. Mutual TLS (mTLS) is for zero-trust networks.

Как шифруются пароли в PgBouncer | PrepBro