Сценарии использования
Доступ в БД через Pangolin Pooler
-
Подключитесь в psql консоль пользователем postgres через Pangolin Pooler:
$ psql -p 6544Ожидаемый результат: Вход успешный.
-
Зайдите в консоль администрирования Pangolin Pooler:
$ psql -p 6544 -U pgbouncer -d pgbouncer -
Для проверки можно выполнить команду, показывающую подключенных к базе пользователей и их количество:
SHOW CLIENTS;Ожидаемый результат: Вернулся список пользователей, подключенных к базе данных через Pangolin Pooler. Пример вывода:
-[ RECORD 4 ]-------+------------------------type | Cuser | postgresdatabase | postgresstate | activeaddr | {IP-Address}port | {port}local_addr | {IP-Address}local_port | {local_port}connect_time | 2024-07-29 16:40:55 MSKloged_in_time | 2024-07-29 17:05:30 MSKrequest_time | 2024-07-29 16:55:41 MSKwait | 0wait_us | 0loged_in | 0loged_in_us | 0close_needed | 0ptr | 0x259cf70link |remote_pid | 0tls |application_name | psqlprepared_statements | 0
Вывод версии компонента
Для вывода версии компонента Pangolin Pooler, а также ядра компонента (PgBouncer) выполните команду:
pangolin-pooler -V
Пример вывода:
Pangolin Pooler 1.5.0
PgBouncer 1.24.0
libevent 2.1.8-stable
adns: evdns2
tls: OpenSSL 1.1.1k FIPS 25 Mar 2021
authproxy: yes
2fa: yes
Проверка работы двухфакторной аутентификации при подключении к Pangolin через Pangolin Pooler
-
Настройте двухфакторную аутентификацию для реализации подключения к СУБД через Pangolin Pooler с включенной или выключенной сквозной аутентификацией.
-
Создайте пользователя и задайте ему пароль:
postgres=#CREATE ROLE test_user;CREATE ROLEpostgres=#ALTER user test_user WITH LOGIN;ALTER ROLEpostgres=#ALTER user test_user WITH PASSWORD '<password>';ALTER ROLE -
Подключитесь к Pangolin, выполните команду:
psql 'host=clustername port=5433 user=test_user sslmode=verify-ca sslcert=client-test_user.crt sslkey=client-test_user.key sslrootcert=root.crt'Введите на запрос пароля корректный пароль, указанный при создании пользователя. В случае успеха psql перейдет в режим ожидания ввода запросов:
Password for user test_user:Ожидаемый результат:
psql (15.5)SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Type "help" for help.test_user@postgres=# -
Проверьте, что выполняется запрос к БД, например:
test_user@postgres=# SELECT now();+-------------------------------+| now |+-------------------------------+| 2025-06-27 17:18:22.813347+03 |+-------------------------------+(1 row)
Сброс контекста сквозной аутентификация
Пример работы команды сброса состояния аутентификация для всех пользователей:
-
Выполните запрос списка пользователей:
PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "SHOW AUTHUSERS"Ожидаемый результат: Запрос выполнен успешно. Все значения колонки
auth_stateравныdone. Пример вывода:name | addr | port | database | pool_mode | tls | auth_state------+--------------+-------+----------+-----------+-----+------------u1 | <IP-Address> | 44246 | d1 | | yes | doneu1 | <IP-Address> | 44260 | d2 | | yes | doneu2 | <IP-Address> | 43228 | d2 | | yes | done(3 rows) -
Выполните сброс состояния аутентификация для всех пользователей:
PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "RESET_AUTH"Результат: Запрос выполнен успешно:
RESET_AUTH -
Повторно выполните запрос списка пользователей:
PGPASSWORD='<password3>' psql -p 6544 -d pgbouncer -U pgbouncer -c "SHOW AUTHUSERS"Ожидаемый результат: Запрос выполнен успешно. Все значения колонки
auth_stateравныnone. Пример вывода:name | addr | port | database | pool_mode | tls | auth_state------+--------------+-------+----------+-----------+-----+------------u1 | <IP-Address> | 44246 | d1 | | yes | noneu1 | <IP-Address> | 44260 | d2 | | yes | noneu2 | <IP-Address> | 43228 | d2 | | yes | none(3 rows)
Исправление попытки неудачной аутентификации
-
Выполните подключение к БД. Пример команды:
psql "host=<IP-Address> port=<port> user=testuser dbname=testdb sslmode=require" -
Аутентификация завершена ошибкой:
psql: error: FATAL -
Проверьте лог-файл Pangolin Pooler на наличие записи типа:
2025-07-18 14:31:02.104 MSK [2102] FATAL testdb/testuser@<IP-Address>:<port> PgBouncer does not allow to use weak authentication type: "trust" -
Исправьте метод аутентификации в
pg_hbaна стороне СУБД, заменивtrustна безопасный метод, напримерscram-sha-256:# Было:host all all <IP-Address>/32 trust# Стало:host all all <IP-Address>/32 scram-sha-256 -
Перечитайте конфигурацию:
sudo systemctl reload postgresql -
Повторите попытку подключения:
psql "host=<IP-Address> port=<port> user=testuser dbname=testdb sslmode=require" -
Успешная аутентификация подтверждается сообщениями в логе:
2025-07-18 14:34:44.412 MSK AUDIT testdb/testuser@<IP-Address>:<port> login attempt tls=yes2025-07-18 14:34:44.416 MSK AUDIT testdb/testuser@<IP-Address>:<port> send auth startup packet2025-07-18 14:34:44.491 MSK AUDIT testdb/testuser@<IP-Address>:<port> auth server login ok
Определение клиентского IP-адреса, подключенного к СУБД через Pangolin Pooler
Вне зависимости от использования сквозной аутентификации, определить клиентский IP-адрес можно следующим образом:
-
Выполните запрос для поиска целевого подключения и его параметров. Пример:
postgres=# SELECT * FROM pg_stat_activity WHERE datname = 'tst1'\gx-[ RECORD 1 ]----+-------------------------------------------------------------------datid | 16734datname | tst1pid | 2366usesysid | 10usename | postgresapplication_name | pgAdmin 4 - CONN:9435271client_addr |client_hostname |client_port |backend_start | 2023-11-13 11:57:06.347595+03xact_start | 2023-11-13 11:57:58.16217+03query_start | 2023-11-13 11:57:58.16217+03state_change | 2023-11-13 11:57:58.162323+03wait_event_type | Clientwait_event | ClientReadstate | idle in transactionquery | begin;| select 1;backend_type | client backendЗначения
pidиclient_port, которые будут использоваться далее:pid = 2366,client_port = 54406. -
Подключитесь к административной БД
pgbouncer:$ psql -p 6544 -U pgbouncer -d pgbouncer -
Выполните команду
SHOW SERVERSи по значениямremote_pidиlocal_portнайдите нужную запись:pgbouncer=# SHOW SERVERS\gx-[ RECORD 3 ]-+------------------------type | Suser | postgresdatabase | tst1state | activeaddr | <IP-Address>port | <port>local_addr | <IP-Address>local_port | <port>connect_time | 2023-11-13 11:57:06 MSKloged_in_time | 2023-11-13 11:57:06 MSKrequest_time | 2023-11-13 11:57:58 MSKremote_pid | 2366link | 0x179d6b0Значение
link, равное0x179d6b0, потребуется на следующем шаге. -
Выполните
SHOW CLIENTSи найдите запись, гдеptrсовпадает сlinkиз предыдущего шага:pgbouncer=# SHOW CLIENTS\gx-[ RECORD 3 ]-+------------------------type | Cuser | postgresdatabase | tst1state | activeaddr | <IP-Address_client>port | <port>local_addr | <IP-Address>local_port | <port>connect_time | 2023-11-13 11:57:28 MSKloged_in_time | 2023-11-13 13:30:22 MSKrequest_time | 2023-11-13 11:57:58 MSKptr | 0x179d6b0В поле
addrуказано значение IP-адреса клиента, а вport— клиентский порт подключения кpgbouncer. -
Дополнительно можно включить расширенное логирование, чтобы видеть IP-адрес клиента и его порт в логах. Для этого в конфигурационный файл
pangolin-pooler.iniдобавьте параметрlog_auditв значении1:log_audit = 1