Сценарии использования
Доступ в БД через 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 | C
user | postgres
database | postgres
state | active
addr | {IP-Address}
port | {port}
local_addr | {IP-Address}
local_port | {local_port}
connect_time | 2024-07-29 16:40:55 MSK
loged_in_time | 2024-07-29 17:05:30 MSK
request_time | 2024-07-29 16:55:41 MSK
wait | 0
wait_us | 0
loged_in | 0
loged_in_us | 0
close_needed | 0
ptr | 0x259cf70
link |
remote_pid | 0
tls |
application_name | psql
prepared_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 ROLE
postgres=#ALTER user test_user WITH LOGIN;
ALTER ROLE
postgres=#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 (18.3)
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 | done
u1 | <IP-Address> | 44260 | d2 | | yes | done
u2 | <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 | none
u1 | <IP-Address> | 44260 | d2 | | yes | none
u2 | <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=yes
2025-07-18 14:34:44.416 MSK AUDIT testdb/testuser@<IP-Address>:<port> send auth startup packet
2025-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 | 16734
datname | tst1
pid | 2366
usesysid | 10
usename | postgres
application_name | pgAdmin 4 - CONN:9435271
client_addr |
client_hostname |
client_port |
backend_start | 2023-11-13 11:57:06.347595+03
xact_start | 2023-11-13 11:57:58.16217+03
query_start | 2023-11-13 11:57:58.16217+03
state_change | 2023-11-13 11:57:58.162323+03
wait_event_type | Client
wait_event | ClientRead
state | idle in transaction
query | 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 | S
user | postgres
database | tst1
state | active
addr | <IP-Address>
port | <port>
local_addr | <IP-Address>
local_port | <port>
connect_time | 2023-11-13 11:57:06 MSK
loged_in_time | 2023-11-13 11:57:06 MSK
request_time | 2023-11-13 11:57:58 MSK
remote_pid | 2366
link | 0x179d6b0Значение
link, равное0x179d6b0, потребуется на следующем шаге. -
Выполните
SHOW CLIENTSи найдите запись, гдеptrсовпадает сlinkиз предыдущего шага:pgbouncer=# SHOW CLIENTS\gx
-[ RECORD 3 ]-+------------------------
type | C
user | postgres
database | tst1
state | active
addr | <IP-Address_client>
port | <port>
local_addr | <IP-Address>
local_port | <port>
connect_time | 2023-11-13 11:57:28 MSK
loged_in_time | 2023-11-13 13:30:22 MSK
request_time | 2023-11-13 11:57:58 MSK
ptr | 0x179d6b0В поле
addrуказано значение IP-адреса клиента, а вport— клиентский порт подключения кpgbouncer. -
Дополнительно можно включить расширенное логирование, чтобы видеть IP-адрес клиента и его порт в логах. Для этого в конфигурационный файл
pangolin-pooler.iniдобавьте параметрlog_auditв значении1:log_audit = 1