Настройка
Конфигурирование Pangolin Pooler
Компонент Pangolin Pooler имеет основной конфигурационный файл – pangolin-pooler.ini
(путь /etc/pangolin-pooler/
).
Редактирование конфигурационных параметров происходит с помощью текстового редактора. Также требуется назначение прав на конфигурационный файл:
sudo chown postgres:postgres /etc/pangolin-pooler/pangolin-pooler.ini
sudo chmod 0600 /etc/pangolin-pooler/pangolin-pooler.ini
У компонента Pangolin Pooler также доступна возможность использования файла аутентификации userlist.txt
, который хранит список пользователей и паролей. Подробное описание и процесс конфигурирования userlist.txt
представлены в разделе далее.
Для применения изменений конфигурации компонента Pooler необходимо выполнить команду перезагрузки конфигурации:
-
через системную команду:
sudo systemctl reload pangolin-pooler
или
systemctrl --user reload pangolin-pooler
-
через команду управления
RELOAD
в административной БДpgbouncer
:$ psql -p 6544 pgbouncer
pgbouncer=# RELOAD;
Конфигурационные параметры
В разделе приведено описание параметров и разделов конфигурационного файла pangolin-pooler.ini
компонента Pangolin Pooler.
Конфигурационный файл имеет формат .ini
. Имена разделов находятся между [
и ]
. Строки, начинающиеся с ;
или #
, воспринимаются как комментарии и игнорируются.
Общие настройки
В таблице ниже приведены общие настройки, которые определяются в разделе [pgbouncer]
конфигурационного файла.
Параметр | Описание | Значение по умолчанию |
| Указывает имя файла журнала. Для работы в фоновом режиме ( Внимание!
Установка |
|
| Указывает PID-файл. Если |
|
| Указывает список адресов (разделенных запятыми), по которым следует прослушивать TCP-соединения. Можно также использовать |
|
| Определяет, какой порт прослушивать. Применяется как к TCP, так и к Unix-сокетам |
|
| Определяет местоположение для сокетов Unix. Применяется как к прослушивающему сокету, так и к соединениям с сервером. Если задана пустая строка, сокеты Unix отключены. Значение, начинающееся с Чтобы перезагрузка в режиме онлайн ( |
|
| Режим файловой системы для сокета Unix. Игнорируется для сокетов в абстрактном пространстве имен |
|
| Имя группы, используемое для сокетов Unix. Игнорируется для сокетов в абстрактном пространстве имен | Не задано |
| Если установлено, указывает пользователя Unix, на которого следует перейти после запуска. Работает, только если Pooler запущен от имени root или если он уже запущен от имени указанного пользователя | Не задано |
| Определяет, когда соединение с сервером может быть повторно использовано другими клиентами:
|
|
| Максимальное количество разрешенных клиентских соединений |
|
| Разрешенное количество соединений с сервером для пары пользователь/база данных. Может быть переопределено в конфигурации для каждой базы данных |
|
| Минимальное количество активных соединений с сервером. Автоматически добавляет серверные соединения в пул, если их число становится меньше указанного. Это улучшает поведение при возвращении нагрузки после периода бездействия. Значение эффективно ограничивается размером пула. |
|
| Сколько дополнительных подключений разрешить к пулу (см. |
|
| Время, за которое должен быть обслужен клиент. После указанного времени будут использованы дополнительные соединения из резервного пула. Значение |
|
| Разрешенное количество соединений с сервером для каждой базы данных (независимо от пользователя). При этом учитывается база данных Этот параметр также можно задать для каждой базы данных в разделе |
|
| Разрешенное количество подключений к серверу для одного пользователя (независимо от базы данных). При этом учитывается пользователь, связанный с пулом, который является либо пользователем, указанным для подключения к серверу, либо, при отсутствии такового, пользователем, под которым подключился клиент. Этот параметр также можно задать для каждого пользователя в разделе |
|
| Разрешенное количество клиентских подключений на одного пользователя (независимо от базы данных). Это значение должно быть больше, чем Этот параметр также можно установить для каждого пользователя в разделе |
|
| По умолчанию Pooler использует соединения с сервером по принципу LIFO (last-in, first-out), так что наибольшая нагрузка распределяется по небольшому количеству соединений. Это обеспечивает наилучшую производительность, если есть только один сервер, обслуживающий базу данных. Но если за адресом базы данных стоит система round-robin (TCP, DNS или список хостов), то будет лучше, если Pangolin Pooler также будет использовать соединения по такому принципу, добиваясь равномерной нагрузки |
|
| По умолчанию Pangolin Pooler отслеживает параметры Если нужно указать несколько значений, используется список, разделенный запятыми (например, |
|
| По умолчанию Pooler разрешает использовать в стартовых пакетах только те параметры, которые он может отслеживать: Если нужно указать несколько значений, используется список, разделенный запятыми (например: |
|
| Идентификатор пира, используемый для идентификации данного процесса pangolin-pooler в группе запущенных вместе процессов. Значение Максимальное значение, которое может быть использовано для |
|
| Отключение протокола Simple Query (PQexec). В отличие от протокола Extended Query, Simple Query допускает несколько запросов в одном пакете, что позволяет осуществлять некоторые классы атак с использованием «SQL-инъекций». Его отключение может повысить безопасность, потому что работать будут только те клиенты, которые используют исключительно протокол Extended Query |
|
| Добавление адреса хоста и порта клиента в настройку имени приложения, устанавливаемую при запуске соединения. Помогает определить источник неправильных запросов. Эта логика применяется только при запуске соединения. Если |
|
| Показывает расположение текущего файла конфигурации. Изменение этого параметра заставит Pangolin Pooler использовать другой файл конфигурации для следующего | Файл из командной строки |
| Устанавливает, как часто обновляются средние значения, отображаемые в различных командах |
|
| Количество подготовленных запросов, поддерживаемых активными на одном серверном соединении. Если значение параметра равно Более подробное описание параметра представлено в исходной документации ядра компонента PgBouncer. Рекомендуется ознакомиться с разделом «Поддержка подготовленных запросов» |
|
| Содержит значение момента времени старта приложения или получения последней команды Если в конфигурационном файле не указано значение Если примененное значение заменено на значение по умолчанию ( Если значение по умолчанию заменено на другое, то сохраняется момент времени смены параметра и начинается проверка необходимости автоматического переключения в режим приостановки приема и обслуживания клиентских соединений. Рекомендуется ознакомиться с разделом «Поддержка топологии N-ЦОД в Pangolin Pooler» |
|
Настройки аутентификации
Pangolin Pooler самостоятельно обрабатывает аутентификацию клиентов и имеет собственную базу данных пользователей. В таблице ниже приведены параметры, отвечающие за настройки аутентификации.
Параметр | Описание | Значение по умолчанию |
| Как аутентифицировать пользователей:
|
|
| Файл конфигурации HBA для использования, когда параметр | Не задано |
| Файл карты идентификаторов для использования, когда параметр | Не задано |
| Имя файла, из которого будут загружаться имена пользователей и пароли. Подробнее описано в подразделе «Файл аутентификации» далее Большинство типов аутентификации требуют, чтобы были заданы либо |
|
| Если задан Прямой доступ к | Не задано |
| Запрос для загрузки пароля пользователя из базы данных. Прямой доступ к Внимание! Запрос выполняется внутри целевой базы данных. Поэтому, если используется функция, ее необходимо установить в каждую базу данных. |
|
| Имя базы данных в разделе | Не задано |
Сквозная аутентификация
В данном разделе представлены параметры для настройки механизма сквозной аутентификации.
Параметр | Описание | Значение по умолчанию |
| Регулирует активацию режима сквозной аутентификации |
|
| Задает максимальное число не аутентифицированного |
|
| Определяет время, в течение которого ранее не аутентифицированному более N раз подряд клиенту при подключении с идентичными параметрами (тип соединения, адрес клиента, база данных и имя пользователя), Pangolin Pooler откажет в обслуживании |
|
| Задает максимальное число кешируемых записей о последних аутентификациях пользователей. Информацию о последних аутентификациях пользователей можно получить с помощью команды |
|
| Включает или выключает аудит |
|
Настройки журнала
В таблице ниже приведены конфигурационные параметры, отвечающие за настройку журнала.
Параметр | Описание | Значение по умолчанию |
| Включение и выключение |
|
| Под каким именем отправлять журналы в |
|
| Под каким объектом отправлять журналы в Возможные варианты: |
|
| Вести журнал успешных входов в систему |
|
| Вести журнал отключений с указанием причин |
|
| Вести журнал сообщений об ошибках, которые пулер отправляет клиентам |
|
| Запись агрегированной статистики в журнал, каждый |
|
| Повысить многословность. Аналогично переключателю |
|
| Вывода результата команды Подробнее в подразделе «Настройка вывода команды SHOW POOLS в лог Pangolin Pooler» |
|
Управление доступом к консоли
В таблице ниже приведены конфигурационные параметры, отвечающие за управление доступом к консоли.
Параметр | Описание | Значение по умолчанию |
| Список пользователей базы данных, которым разрешено подключаться и выполнять все команды в консоли. Разделен запятыми. Игнорируется, если | Пусто |
| Список пользователей базы данных (разделен запятыми), которым разрешено подключаться и выполнять запросы в консоли только для чтения, а также все команды | Пусто |
Проверки целостности соединений, тайм-ауты
В таблице ниже приведены конфигурационные параметры, отвечающие за проверки целостности соединений и тайм-ауты.
Параметр | Описание | Значение по умолчанию |
| Запрос отправляется на сервер при разрыве соединения, прежде чем сделать его доступным для других клиентов. В этот момент ни одна транзакция не выполняется, поэтому значение не должно включать |
|
| Определяет, должен ли |
|
| Определяет, как долго держать освобожденные соединения доступными для немедленного повторного использования без выполнения |
|
| Простой запрос, не требующий никаких действий, для проверки того, имеется ли соединение с сервером. Если строка пустая, то проверка отключена |
|
| Отключить сервер в режиме пула сессий сразу или после завершения текущей транзакции, если он находится в режиме |
|
| Пулер закроет неиспользуемое (не связанное в данный момент ни с одним клиентским соединением) серверное соединение, которое было подключено дольше, чем это значение. Установка значения |
|
| Если соединение с сервером простаивает больше указанного количества секунд, оно будет закрыто. Значение |
|
| Если соединение и вход в систему не завершатся за это время, соединение будет закрыто |
|
| Если вход на сервер не удался из-за сбоя подключения или аутентификации, пулер ждет столько времени, сколько указано в |
|
| Если клиент подключается, но не успевает войти в систему за время |
|
| Если автоматически созданные (через |
|
| Продолжительность кеширования DNS-поисков. Фактическое значение DNS TTL игнорируется |
|
| Как долго могут кешироваться ошибки DNS и поиск DNS NXDOMAIN |
|
| Период проверки изменения серийного номера зоны. Pooler может собирать DNS-зоны из имен хостов (все после первой точки), а затем периодически проверять, не изменилась ли последовательность зон. Если он замечает изменения, все имена хостов в этой зоне просматриваются заново. Если IP-адрес какого-либо хоста изменится, его соединения будут аннулированы. Работает только с бэкендом c-ares (опция конфигурации |
|
| Определяет максимальное количество переходов состояний клиентских подключений (см. Используется в диагностических целях |
|
| Расположение пользовательского файла Разбор файла выполняется библиотекой бэкенда DNS, а не Pangolin Pooler, поэтому подробности о допустимом синтаксисе и директивах смотрите в документации к библиотеке |
|
Настройки TLS
В таблице ниже приведены конфигурационные параметры, отвечающие за настройки TLS.
Параметр | Описание | Значение по умолчанию |
| По умолчанию TLS-соединения отключены. При включении необходимо также настроить Возможные значения:
|
|
| Приватный ключ для Pangolin Pooler для приема клиентских соединений | Не задано |
| Сертификат для закрытого ключа. Клиенты могут подтвердить его | Не задано |
| Файл корневого сертификата для проверки клиентских сертификатов | Не задано |
| Разрешенные версии протокола TLS. Минимальная версия – 1.2. Допустимые значения: |
|
| Разрешенные шифры TLS в синтаксисе OpenSSL. Сокращения:
Затронуты только соединения, использующие TLS версии 1.2 и ниже. В настоящее время не существует настройки, контролирующей выбор шифров, используемых соединениями TLS версии 1.3 |
|
| Имя эллиптической кривой, используемой для обмена ключами ECDH. Допустимые значения: |
|
| Тип обмена ключами DHE. Допустимые значения: |
|
| Режим TLS, используемый для соединений с серверами СУБД. Возможные значения:
|
|
| Файл корневого сертификата для проверки сертификатов сервера | Не задано |
| Закрытый ключ для аутентификации пулера на сервере | Не задано |
| Сертификат для закрытого ключа. Сервер может подтвердить его | Не задано |
| Разрешенные версии протокола TLS. Допустимые значения: |
|
| Разрешенные шифры TLS в синтаксисе OpenSSL. Сокращения:
Затронуты только соединения, использующие TLS версии 1.2 и ниже. В настоящее время не существует настройки, контролирующей выбор шифров, используемых соединениями TLS версии 1.3 |
|
| Параметр управляет активацией устаревших алгоритмов через подгрузку провайдера Legacy в OpenSSL 3.0.0+ (аналог Engine API в OpenSSL 1.+) при запуске компонента. Это необходимо для обеспечения обратной совместимости с компонентами, использующими OpenSSL 1.+ |
|
Опасные тайм-ауты
Установка тайм-аутов, указанных в таблице, может привести к непредвиденным ошибкам.
В таблице ниже приведены конфигурационные параметры, отвечающие за установку тайм-аутов.
Параметр | Описание | Значение по умолчанию |
| Запросы, выполняющиеся дольше этого времени, отменяются. Следует использовать только при немного меньшем размере серверной части |
|
| Максимальное время, которое запросы могут провести в ожидании выполнения. Если за это время запрос не будет назначен серверу, клиент отключается. Значение Настройка используется для предотвращения захвата соединений невосприимчивыми серверами, помогает, когда сервер не работает или отклоняет соединения по какой-либо причине |
|
| Максимальное время, которое запросы на отмену могут провести в ожидании выполнения. Если за это время запрос на отмену не будет назначен серверу, клиент отключается. В случае значения параметра '0' запросы на отмену будут ставиться в очередь бесконечно. Эта настройка используется для предотвращения блокировки клиента, когда отмена не может быть переслана из-за нерабочего состояния сервера. |
|
| Клиентские соединения, простаивающие дольше этого количества секунд, закрываются. Значение должно быть больше, чем настройки времени жизни соединения на стороне клиента, используется только при проблемах с сетью |
|
| Если клиент находится в состоянии «простоя в транзакции» дольше чем это значение, он будет отключен |
|
| Сколько времени ждать очистки буфера при |
|
Низкоуровневые сетевые настройки
В таблице ниже приведены конфигурационные параметры, отвечающие за низкоуровневые сетевые настройки.
Параметр | Описание | Значение по умолчанию |
| Размер внутреннего буфера для пакетов. Влияет на размер отправляемых TCP-пакетов и общее использование памяти. Фактические пакеты |
|
| Максимальный размер пакетов СУБД, которые пропускает Pooler. Один пакет — это либо один запрос, либо одна строка набора результатов. Полный набор результатов может быть больше |
|
| Аргумент |
|
| Сколько раз нужно обработать данные на одном соединении, прежде чем продолжить работу. Без этого ограничения одно соединение с большим набором результатов может надолго замедлить Pangolin Pooler. Один цикл обрабатывает один |
|
| Указывает, устанавливать ли параметр сокета |
|
| Устанавливает опцию сокета |
|
| — | Не задано |
| Включает базовый |
|
| — | Не задано |
| — | Не задано |
| — | Не задано |
| Устанавливает параметр сокета |
|
Раздел [databases]
Раздел [databases]
определяет имена баз данных, к которым могут подключаться клиенты Pooler, и указывает, куда будут направляться эти соединения. Раздел содержит строки типа ключ=значение
:
dbname = connection string
Где в качестве ключа будет взято имя базы данных, а в качестве значения — строка подключения, состоящая из пар ключ=значение
параметров подключения (представлены далее в таблице).
Имя базы данных может содержать символы _0-9A-Za-z
без кавычек. Имена, содержащие другие символы, должны быть заключены в стандартные кавычки идентификатора SQL – двойные кавычки. При использовании внутри имени БД один экземпляр двойной кавычки ("
), необходимо оформлять как двойные парные кавычки (""
).
*
выступает в качестве «альтернативной» базы данных: если точное имя не существует, его значение берется в качестве строки подключения для запрашиваемой базы данных. Например, если есть следующая запись и нет других переопределяющих записей:
* = host=foo
Тогда подключение к Pangolin Pooler с указанием базы данных bar
будет вести себя так, как если следующая запись существует (пользуясь тем, что по умолчанию dbname
— это имя базы данных на стороне клиента):
bar = host=foo dbname=bar
Такие автоматически созданные записи базы данных очищаются, если они простаивают дольше времени, заданного в параметре autodb_idle_timeout
.
Параметр | Описание | Значение |
| Имя базы данных назначения | По умолчанию: То же, что и имя базы данных на стороне клиента |
| Имя хоста или IP-адрес для подключения Имена хостов разрешаются во время соединения, результат кешируется в соответствии с параметром Внимание!
В списке все хосты должны быть доступны в любое время: нет никаких механизмов для пропуска недоступных хостов или для выбора только доступных хостов из списка. Также это влияет только на то, как выбираются места назначения новых соединений. Изучите параметр | По умолчанию: не задано, что означает использование сокета Unix. Если значение начинается с Можно указать список имен или адресов хостов, разделенных запятыми. В этом случае соединения устанавливаются поочередно. |
| – | По умолчанию: |
| Если установлено значение В противном случае Pooler входит в базу данных назначения с именем пользователя клиента, а значит на одного пользователя будет приходиться один пул | |
| Если пароль здесь не указан, будет использован пароль из файла | |
| Номер порта, к которому нужно подключиться для выполнения аутентификации пользователей Ознакомьтесь с разделом «Cквозная аутентификация» | По умолчанию |
| Переопределяет глобальный параметр | |
| Переопределение глобального параметра | |
| Переопределение глобального параметра | |
| Параметр задает максимальное количество соединений для выполнения аутентификации пользователей. Ознакомьтесь с разделом «Cквозная аутентификация» |
|
| Устанавливает максимальный размер пулов для этой базы данных. | Если не задано, используется значение |
| Установка минимального размера пула для базы данных. Выполняется только в том случае, если хотя бы одно из следующих условий верно:
| Если не задан, используется глобальный |
| Установка дополнительных соединений для этой базы данных. По соображениям обратной совместимости | Если не задано, используется |
| Запрос, выполняемый после установления соединения, но перед тем, как разрешить использовать соединение любым клиентам. Если запрос вызывает ошибки, они записываются в журнал, но в противном случае игнорируются | |
| Устанавливает режим пула, характерный для этой базы данных | Если не задан, используется режим пула по умолчанию |
| Если в
Рекомендуется установить значение |
|
| Настраивает максимальное значение для всей базы данных, то есть все пулы в базе данных не будут иметь больше этого количества соединений с сервером | |
| Настраивает время жизни сервера для каждой базы данных | Если значение не задано, база данных будет использовать значение времени жизни сервера, настроенное для всего экземпляра |
| Запрашивает у сервера использование указанной клиентской кодировки ( | |
| Запрашивает у сервера использование указанного стиля даты ( | |
| Запрашивает у сервера использование указанного часового пояса ( |
Раздел [users]
Этот раздел содержит строки с парами ключ=значение
:
user1 = settings
Где ключ будет восприниматься как имя пользователя, а значение — как список пар ключ=значение
настроек конфигурации, специфичных для этого пользователя.
Здесь доступны несколько параметров, представлены в таблице далее.
При настройке auth_file
, если пользователь указан в этом разделе, но не указан в auth_file
(userlist.txt
), Pangolin Pooler попытается использовать auth_query
для поиска пароля для этого пользователя, если установлен auth_user
. Если auth_user
не установлен, Pooler будет имитировать, что пользователь существует, не сможет вернуть клиенту сообщения «такого пользователя нет», но и не будет принимать указанный пароль.
Сквозная аутентификация не работает для пользователей, которые указаны в секции [users]
.
Параметр | Описание | Значение |
| Задайте максимальный размер пула для всех подключений от этого пользователя | Если значение не задано, используется база данных или |
| Задайте количество дополнительных подключений к пулу для этого пользователя | Если значение не задано, используется конфигурация базы данных или глобальный параметр |
| Устанавливает режим пула, который будет использоваться для всех соединений от этого пользователя | Если он не задан, используется режим пула базы данных или режим пула по умолчанию |
| Задает максимум для пользователя, то есть все пулы с этим пользователем не будут иметь больше этого количества подключений к серверу | |
| Задает максимальное количество секунд, в течение которых может выполняться пользовательский запрос | Если этот тайм-аут установлен, он переопределяет значение на уровне сервера |
| Задает максимальное количество секунд, в течение которых пользователь может держать транзакцию в режиме ожидания | Если этот тайм-аут установлен, он переопределяет значение на уровне сервера |
| Задает максимальное время в секундах, в течение которого клиент может бездействовать при подключении к экземпляру компонента | Если этот тайм-аут установлен, он переопределяет значение на уровне сервера |
| Настройте максимальное количество клиентских подключений для пользователя. Это пользовательский эквивалент параметра |
Раздел [peers]
В разделе [peers]
определяются пиры, которым Pangolin Pooler может пересылать запросы на отмену и куда эти запросы будут направляться.
Раздел содержит строки с парами ключ=значение
:
peer_id = connection string
Параметр | Описание | Значение |
| Имя хоста или IP-адрес для подключения | |
| – | По умолчанию: |
| Устанавливает максимальное количество запросов на отмену, которые могут одновременно поступать к пиру. Запросы на отмену обычно поступают пакетами, например, когда резервный сервер СУБД «медленный» или не работает. Поэтому важно, чтобы размер пула ( | Если значение не задано, то по умолчанию используется |
Поддержка подготовленных запросов
В таблице ниже приведены конфигурационные параметры, отвечающие за настройку функциональности «Поддержка подготовленных запросов».
Параметр | Описание | Значение по умолчанию |
| Идентификатор региона для клиентских сессий, генерируемый алгоритмом |
|
| Идентификатор обработчика для клиентских сессий, генерируемый алгоритмом |
|
Необходимость отдельного session_worker_id
обусловлена возможностью запуска на одном узле нескольких процессов Pangolin Pooler. Для разделения множества идентификаторов между такими процессами используется параметр session_worker_id
- свой для каждого процесса узла компонента Pangolin Pooler (session_region_id
).
Необходимо учитывать что каждый узел кластера должен иметь свое значение параметра session_region_id
.
Кеширования серверных и клиентских сертификатов
В таблице ниже приведены конфигурационные параметры, отвечающие за кеширования серверных и клиентских сертификатов.
Параметр | Описание | Значение по умолчанию |
| Определяет необходимость кеширования клиентских сертификатов в Pangolin Pooler |
|
| Определяет необходимость кеширования серверных сертификатов в Pangolin Pooler |
|
Поддержка CRL
В таблице ниже приведены конфигурационные параметры, отвечающие за поддержку CRL.
Параметр | Описание | Значение по умолчанию |
| Путь к файлу CRL | Не задано |
| Путь к директории с файлами CRL, по которым выполняется проверка аннулирования клиентских сертификатов | Не задано |
| Путь к файлу CRL | Не задано |
| Путь к директории с файлами CRL, по которым выполняется проверка аннулирования серверного сертификата Pangolin | Не задано |
Управление сертификатами PKCS#12
В таблице ниже приведены конфигурационные параметры, отвечающие за функциональность «Использование и управление сертификатами PKCS#12».
Параметр | Описание | Значение по умолчанию |
| Путь к конфигурационному файлу в JSON-формате, содержащему данные для генерации сертификата | Не задано |
| Путь к конфигурационному файлу в JSON-формате, содержащему данные для генерации сертификата | Не задано |
Файл аутентификации userlist.txt
Формат файла, заданного параметром auth_file
- userlist.txt
. Это текстовый файл в следующем формате:
"username2" "md5abcdef012342345" ...
"username2" "SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey>"
Должно быть не менее двух полей, заключенных в двойные кавычки. Первое поле — имя пользователя, а второе — пароль в открытом виде, MD5-хеш или SCRAM-секрет. Pangolin Pooler игнорирует остальную часть строки. Двойные кавычки в значении поля можно экранировать, написав две двойные кавычки.
Пароли или секреты, хранящиеся в файле аутентификации, служат двум целям. Во-первых, они используются для проверки паролей входящих клиентских соединений, если настроен метод аутентификации на основе пароля. Во-вторых, они используются в качестве паролей для исходящих соединений с внутренним сервером, если внутренний сервер требует аутентификации на основе пароля (если пароль не указан непосредственно в строке подключения к базе данных). Последний вариант работает, если пароль хранится в виде обычного текста или MD5-хеша. Это объясняется свойством безопасности, присущим SCRAM: хранимый секрет SCRAM сам по себе не может быть использован для получения учетных данных для входа в систему.
Конфигурирование userlist.txt
-
Измените файл
userlist.txt
(путь к файлу/etc/pangolin-pooler/userlist.txt
) при помощи текстового редактора, добавив следующие строки:"<user>" "<password>"
Пример файла
userlist.txt
:"user" "qwerty"
Или в засекреченном виде:
"user" "md5175c641eaed0b6c05ae8444b73d789f0"
-
Измените права и владельца файла:
sudo chown postgres:postgres /etc/pangolin-pooler/userlist.txt
sudo chmod 0600 /etc/pangolin-pooler/userlist.txt
Конфигурирование SSL-соединения
Pangolin Pooler позволяет устанавливать защищенное соединение по протоколу SSL (а именно TLS версии 1.2) между клиентами и Pangolin Pooler, и между СУБД и Pangolin Pooler. Для того, чтобы защищенное соединение работало, необходимо провести конфигурирование параметров в Pangolin Pooler и в СУБД Pangolin, а также иметь:
- сертификат x509 и закрытый ключ для каждого сервера БД;
- сертификат x509 удостоверяющего центра(УЦ);
- сертификат и закрытый ключ клиента;
- CRL-файлы удостоверяющих центров для проверки сертификатов по спискам отозванных сертификатов.
Настройка СУБД Pangolin
После выпуска сертификатов, в конфигурационном файле postgresql.conf
необходимо указать пути к сертификату и закрытому ключу сервера, корневого сертификата и, при необходимости, список отозванных сертификатов. После, чтобы включить шифрование, нужно установить параметр в конфигурационном файле ssl = 'on'
и перезагрузить сервер. После этого, с СУБД можно будет установить как зашифрованное, так и базовое соединение, в зависимости от того, какие способы разрешены в pg_hba.conf
.
Для аутентификации клиента необходимо выпустить сертификат клиента, после чего передавать его при помощи драйвера (например jdbc, который использует параметры sslcert
, sslkey
, sslrootcert
и sslmode
). Этого достаточно, чтобы начать использовать TLS и mTLS в Pangolin.
Проверить, какое соединение было установлено можно SQL-запросом:
postgres=# CREATE EXTENSION sslinfo;
CREATE EXTENSION
postgres=# SELECT a.current_user, b.ssl_version FROM (SELECT current_user AS current_user) a,(SELECT ssl_version() AS ssl_version) b;
current_user | ssl_version
--------------+-------------
postgres | TLSv1.2
Настройка Pangolin Pooler
В pangolin-pooler.ini
добавьте секцию TLS-настроек и настройте параметры защищенного соединения.
Между Pangolin Pooler и СУБД Pangolin настраивается SSL-соединение, между Pangolin Pooler и клиентом — по требованию клиента. В обоих случаях минимальная версия TLS 1.2.