Обзор конфигурации PG_HBA
В ADPG поле PG_HBA используется для настройки аутентификации клиента, которая контролируется файлом pg_hba.conf в PostgreSQL. Поле PG_HBA содержит записи аутентификации в том же формате, что и pg_hba.conf.
ВНИМАНИЕ
Не рекомендуется редактировать непосредственно файл pg_hba.conf. Когда сервис ADPG выполняет действие Reconfigure & Restart, pg_hba.conf переписывается со служебными настройками и настройками из поля PG_HBA, находящегося на вкладке Primary configuration сервиса ADPG.
|
Формат PG_HBA
Поле PG_HBA должно содержать набор записей с правилами аутентификации, по одному на каждой строке. Запись состоит из полей, разделенных пробелами или табуляцией. Поле может содержать пробелы, если его значение заключено в двойные кавычки. Пустые строки и любой текст после символа комментария #
игнорируются. Чтобы продолжить запись на следующей строке, завершите строку обратной косой чертой (\
).
Записи в PG_HBA обрабатываются сверху вниз. ADPG определяет, соответствует ли запрошенное соединение записи, т.е. совпадают ли тип соединения, имя базы данных, пользователь и IP-адрес. Если да, то выполняется аутентификация с использованием метода, указанного в записи. Если результат успешный, соединение разрешается, в противном случае оно запрещается. Последующие записи не рассматриваются. Таким образом, записи должны идти от частного к общему.
Запись может иметь несколько форматов и содержать различные поля:
local database user auth-method [auth-options] host database user address auth-method [auth-options] hostssl database user address auth-method [auth-options] hostnossl database user address auth-method [auth-options] hostgssenc database user address auth-method [auth-options] hostnogssenc database user address auth-method [auth-options] host database user IP-address IP-mask auth-method [auth-options] hostssl database user IP-address IP-mask auth-method [auth-options] hostnossl database user IP-address IP-mask auth-method [auth-options] hostgssenc database user IP-address IP-mask auth-method [auth-options] hostnogssenc database user IP-address IP-mask auth-method [auth-options] include file include_if_exists file include_dir directory
Для полей database
и user
можно указать отдельный файл, поставив перед именем файла @
. Этот файл может содержать имена баз данных или пользователей соответственно. Файлы, включенные в правила аутентификации с помощью конструкции @
, считываются как списки имен, которые могут быть разделены пробелами или запятыми. Вложенные конструкции с символом @
разрешены. Используйте #
для добавления комментария. Если имя файла после @
не является абсолютным путем, оно считается относительным каталогу, содержащему ссылающийся файл. При использовании @
непосредственно в поле PG_HBA путь задается относительно директории, указанной в конфигурационном параметре data_directory
. Значение по умолчанию — pg_data1/adpg16/
.
Поля записи подробно описаны ниже.
Поля записи аутентификации
В этом разделе описываются поля записи аутентификации. Количество полей варьируется в зависимости от типа записи.
Connection type
За исключением записей, содержащих include
, первое поле определяет тип соединения. Возможные значения перечислены в таблице ниже.
Наименование | Описание |
---|---|
local |
Соответствует соединениям, использующим сокеты домена Unix. Без записи этого типа подключения через Unix-сокеты не допускаются |
host |
Управляет подключениями по TCP/IP. Записи |
hostssl |
Соответствует подключениям через TCP/IP, если подключение использует шифрование SSL. Поддержка SSL включается в ADPG во время сборки. Чтобы использовать |
hostnossl |
Соответствует подключениям по протоколу TCP/IP, которые не используют SSL |
hostgssenc |
Соответствует подключениям, выполненным по протоколу TCP/IP, если подключение устанавливается с шифрованием GSSAPI |
hostnogssenc |
Соответствует подключениям по протоколу TCP/IP, не использующим шифрование GSSAPI |
database
Поле database
указывает каким базам данных соответствует запись. Это поле принимает следующие значения:
-
Имя определенной базы данных или регулярное выражение, определяющее имена баз данных. Можно указать несколько регулярных выражений и/или имен баз данных, разделив их запятыми (
,
). Если имя начинается с символа слэш (/
), значение рассматривается как регулярное выражение. См. Regular expression details. Например, значение/^db\d{2,4}$
разрешает подключения к любым базам данных с именем, начинающимся сdb
и заканчивающимся числом, содержащим от 2 до 4 цифр. Такими значениями могут бытьdb1234
илиdb98
. -
all
— все базы данных. -
sameuser
— запись соответствует правилу, если запрошенная база данных имеет то же имя, что и указанный пользователь. Например, если пользовательpostgres
, он может подключиться только к базе данныхpostgres
. -
samerole
— указывает, что пользователь должен быть членом роли с тем же именем, что и база данных.samegroup
— устаревшее название для опцииsamerole
, которое также можно использовать. Если имя базы данных —customers
, то к ней могут подключиться только пользователи, являющиеся членами ролиcustomers
. Суперпользователи считаются соответствующимиsamerole
только в том случае, если они явно принадлежат к указанной роли. -
replication
— указывает, что запись соответствует правилу, если запрошено соединение для физической репликации. Однако значениеreplication
не соответствует соединению для логической репликации. -
Отдельный файл, содержащий имена баз данных и/или регулярные выражения. Его можно указать, поставив перед именем файла
@
.
Например, приведенная ниже конфигурация позволяет пользователю user1
подключаться к базам данных book
и author
:
# type database user address auth-method
host book,author user1 0.0.0.0/0 md5
user
Поле указывает, каким именам пользователей базы данных (ролям) соответствует запись. Это поле допускает следующие значения:
-
Имя определенной роли (имя пользователя) или регулярное выражение, начинающееся с символа слэш (
/
), которое определяет имя роли. Вы можете добавить несколько ролей и/или регулярных выражений, разделенных запятыми. Например, регулярное выражение/^.*support$
разрешает подключения для пользователей, чьи имена заканчиваются наsupport
. -
Имя группы, которому предшествует
+
. В ADPG/PostgreSQL нет различия между пользователями и группами.+
означает, что роли соответствуют правилу, если они являются прямыми или косвенными членами указанной роли. Имя без+
соответствует только указанной роли. Суперпользователь рассматривается как член роли, только если он явно является её членом. -
all
— все роли (пользователи). -
Отдельный файл, содержащий имена пользователей и/или регулярные выражения. Его можно указать, поставив перед именем файла
@
.
Приведенная ниже конфигурация позволяет всем членам роли support
подключаться к базе данных access_stat
:
# type database user address auth-method
host access_stat +support 0.0.0.0/0 md5
address
В этом поле указываются адреса хостов клиента, которым должна соответствовать запись. Оно может содержать имя хоста, диапазон IP-адресов или одно из специальных ключевых слов. Разрешены следующие значения:
-
Диапазон IP-адресов, указанный с помощью нотации CIDR.
-
all
— любой IP-адрес. -
samehost
— любой из IP-адресов сервера. -
samenet
— любой адрес в подсети, к которой сервер подключен напрямую. -
Имя хоста. Любое значение, которое не является диапазоном IP-адресов или специальным ключевым словом, рассматривается как имя хоста. Имя хоста, используемое в этом поле, должно быть тем, что возвращается при преобразовании IP-адреса клиента в имя, иначе строка не будет соответствовать хосту. Некоторые базы данных имен хостов позволяют связывать IP-адрес с несколькими именами хостов, но операционная система возвращает только одно имя хоста при попытке разрешить IP-адрес. Спецификация имени хоста, которая начинается с точки (
.
), соответствует суффиксу фактического имени хоста. Таким образом,.example.com
будет соответствовать не толькоexample.com
, но иhome.example.com
.
Приведенные ниже примеры позволяют любому пользователю локальной системы подключаться к любой базе данных с любым именем пользователя базы данных.
Для локальных замкнутых подключений по TCP/IP:
# type database user address auth-method
host all all 127.0.0.1/32 trust
Для IPv6:
# type database user address auth-method
host all all ::1/128 trust
С именем хоста (обычно охватывает как IPv4, так и IPv6):
# type database user address auth-method
host all all localhost trust
Разрешает подключение любому пользователю с любого хоста с IP-адресом 192.168.54.x
:
# type database user address auth-method
host all all 192.168.54.0/24 trust
IP-address и IP-mask
Эти два поля можно использовать в качестве альтернативы записи IP-адрес/длина маски CIDR. Вместо указания длины маски фактическая маска задается в отдельном столбце. Например, 255.0.0.0
представляет длину маски IPv4 CIDR 8, а 255.255.255.255
определяет длину маски IPv4 CIDR 32.
Эти поля не могут быть указаны для записи с типом подключения local
.
Конфигурация ниже позволяет любому пользователю локальной системы подключаться к любой базе данных с любым именем пользователя базы данных:
# type database user IP-address IP-mask auth-method
host all all 127.0.0.1 255.255.255.255 trust
auth-method
Поле auth-method
определяет метод аутентификации, который следует использовать, когда соединение соответствует записи. Все значения указываются в нижнем регистре и обрабатываются с учетом регистра, поэтому даже аббревиатуры, такие как ldap
, должны быть указаны в нижнем регистре. Для получения дополнительной информации о методах аутентификации обратитесь к статье Authentication methods.
В таблице ниже перечислены поддерживаемые значения для метода аутентификации.
Значение | Описание |
---|---|
trust |
Разрешает подключение безусловно. Этот метод позволяет любому, кто может подключиться к серверу базы данных ADPG/PostgreSQL, войти в систему как любой пользователь PostgreSQL без какой-либо аутентификации. См. Trust authentication |
reject |
Отклоняет подключение безусловно. Это полезно для фильтрации определенных хостов из группы. Например, можно заблокировать подключение определенного хоста, в то время как более поздняя запись позволяет подключаться оставшимся хостам из определенной сети |
scram-sha-256 |
Выполняет аутентификацию |
md5 |
Выполняет аутентификацию |
password |
Требует от клиента предоставления незашифрованного пароля для аутентификации. Поскольку пароль отправляется в открытом виде по сети, его не следует использовать в ненадежных сетях. См. Аутентификация по паролю |
gss |
Использует GSSAPI для аутентификации пользователя. Доступно только для соединений TCP/IP. Может использоваться в сочетании с шифрованием GSSAPI. См. GSSAPI authentication |
sspi |
Использует SSPI для аутентификации пользователя. Доступно только для клиентов Windows. См. SSPI Authentication |
ident |
Получает имя пользователя операционной системы клиента, связываясь с сервером ident на клиенте. Система проверяет, соответствует ли оно запрошенному имени пользователя базы данных. Аутентификация |
peer |
Получает имя пользователя операционной системы клиента и проверяет, совпадает ли оно с запрошенным именем пользователя базы данных. Доступно только для локальных подключений. См. Peer authentication |
ldap |
Аутентификация производится с использованием сервера LDAP. См. Аутентификация Kerberos |
radius |
Аутентификация производится с использованием сервера RADIUS. См. RADIUS Authentication |
cert |
Аутентификация производится с использованием клиентских сертификатов SSL. См. Включение SSL-шифрования |
pam |
Аутентификация производится с использованием службы подключаемых модулей аутентификации (PAM), предоставляемой операционной системой. См. PAM Authentication |
bsd |
Аутентификация производится с использованием службы аутентификации BSD, предоставляемой операционной системой. См. BSD Authentication |
Метод trust
не выполняет аутентификацию. Имеет смысл использовать trust
только для локальных подключений. Метод reject
безусловно запрещает доступ. Вы можете использовать его для запрета любых подключений определенного типа или с определенных адресов. Например, можно запретить незашифрованные подключения.
Методы аутентификации scram-sha-256
, md5
, ldap
, radius
и pam
запрашивают у пользователя пароль и проверяют его на соответствие паролю, хранящемуся в СУБД или во внешней службе.
Методы peer
, cert
, gss
и sspi
обеспечивают внешнюю аутентификацию. В результате успешной аутентификации ADPG/PostgreSQL получает указанное при подключении имя — внутреннее имя СУБД и имя, идентифицированное внешней системой, — внешнее имя. Поэтому все перечисленные методы позволяют указать дополнительный параметр map
в auth-options. Параметр map
определяет правила сопоставления внутренних и внешних имен.
Следующая конфигурация позволяет всем пользователям подключаться ко всем базам данных с использованием шифрования SSL и клиентских сертификатов SSL:
# type database user address auth-method
hostssl all all 0.0.0.0/0 cert
auth-options
Поле auth-options
определяет параметры для указанного значения auth-method. Параметры следует добавлять в следующем формате: <name>=<value>
.
В дополнение к параметрам, зависящим от метода аутентификации, существует независимый от метода параметр аутентификации clientcert
, который можно указать в любой записи hostssl
. Он может принимать следующие значения:
-
verify-ca
— требует, чтобы клиент предоставил действительный (доверенный) SSL-сертификат; -
verify-full
— требует, чтобы клиент предоставил действительный (доверенный) SSL-сертификат и значениеCN
(Common Name
) в сертификате соответствовало имени пользователя или применяемому сопоставлению имен.
Этот параметр работает аналогично методу аутентификации cert
, но позволяет связать проверку клиентских сертификатов с любым методом аутентификации, поддерживающим записи hostssl
.
В любой записи, которая включает аутентификацию клиентского сертификата (запись с методом аутентификации cert
или параметром clientcert
), необязательный параметр clientname
указывает, какой элемент учетных данных в клиентском сертификате должен быть сопоставлен во время проверки. Этот параметр может иметь одно из двух значений:
-
CN
— имя пользователя сопоставляется с полемCommon Name
(CN
). Это значение по умолчанию. -
DN
— имя пользователя сопоставляется с полемDistinguished Name
(DN
).
Параметр map
указывается для методов, использующих сопоставление имен. Он определяет правила сопоставления внутренних и внешних имен. Чтобы задать параметр map
, необходимо сначала добавить правила в файл pg_ident.conf. Параметр конфигурации ident_file
определяет местоположение этого файла. Путь по умолчанию — pg_data1/adpg16/pg_ident.conf
. Например:
# pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME
map_admin admin admin_db
Затем нужно присвоить имя правила сопоставления параметру map
. Приведенная ниже конфигурация позволяет пользователю операционной системы admin
подключаться в качестве пользователя базы данных admin_db
с метод аутентификации ident
только с хоста 192.168.12.10
:
# type database user address auth-method auth-options
host all admin_db 192.168.12.10/32 ident map=map_admin
Включение внешних файлов
Записи, перечисленные в таблице ниже, позволяют включать содержимое внешних файлов в поле PG_HBA.
Имя | Описание |
---|---|
include |
Запись будет заменена содержимым указанного файла |
include_if_exists |
Запись будет заменена содержимым указанного файла, если файл существует. В противном случае в лог записывается сообщение о том, что файл был пропущен |
include_dir |
Запись будет заменена содержимым всех обработанных в алфавитном порядке файлов, найденных в указанной директории, если они не начинаются с |
Пример:
include file1
Просмотр записей pg_hba.conf
Можно использовать представление pg_hba_file_rules, чтобы вывести сводную информацию о содержимом pg_hba.conf. Это представление отображает строку для каждой непустой, не являющейся комментарием строки в pg_hba.conf с информацией о том, можно ли успешно применить правило аутентификации.
Обратите внимание, что это представление отображает текущее содержимое файла, а не содержимое, которое было загружено сервером в последний раз. Строка, отражающая некорректную запись, будет иметь значения только для полей line_number
и error
. В ADPG содержимое pg_hba.conf проверяется во время действия Reconfigure & Restart. Если проверка не удалась, действие завершится с ошибкой и будет использовано старое содержимое pg_hba.conf.
SELECT * FROM pg_hba_file_rules;
Возможный результат:
rule_number | file_name | line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+------------------------------+-------------+-------+---------------+-------------------+--------------+-----------------+---------------+------------+------- 1 | /pg_data1/adpg16/pg_hba.conf | 3 | local | {all} | {all} | | | peer | | 2 | /pg_data1/adpg16/pg_hba.conf | 4 | local | {replication} | {adpg_replicator} | | | scram-sha-256 | | 3 | /pg_data1/adpg16/pg_hba.conf | 5 | host | {replication} | {adpg_replicator} | 10.92.40.105 | 255.255.255.255 | scram-sha-256 | | 4 | /pg_data1/adpg16/pg_hba.conf | 6 | host | {all} | {adpg_replicator} | 10.92.40.105 | 255.255.255.255 | scram-sha-256 | | 5 | /pg_data1/adpg16/pg_hba.conf | 7 | host | {replication} | {adpg_rewind} | 10.92.40.105 | 255.255.255.255 | scram-sha-256 | | 6 | /pg_data1/adpg16/pg_hba.conf | 8 | host | {all} | {adpg_rewind} | 10.92.40.105 | 255.255.255.255 | scram-sha-256 | | 7 | /pg_data1/adpg16/pg_hba.conf | 9 | host | {replication} | {adpg_replicator} | 10.92.40.214 | 255.255.255.255 | scram-sha-256 | | 8 | /pg_data1/adpg16/pg_hba.conf | 10 | host | {all} | {adpg_replicator} | 10.92.40.214 | 255.255.255.255 | scram-sha-256 | | 9 | /pg_data1/adpg16/pg_hba.conf | 11 | host | {replication} | {adpg_rewind} | 10.92.40.214 | 255.255.255.255 | scram-sha-256 | | 10 | /pg_data1/adpg16/pg_hba.conf | 12 | host | {all} | {adpg_rewind} | 10.92.40.214 | 255.255.255.255 | scram-sha-256 | | 11 | /pg_data1/adpg16/pg_hba.conf | 13 | host | {all} | {postgres} | 0.0.0.0 | 0.0.0.0 | ident | {map=test} | 12 | /pg_data1/adpg16/file1 | 1 | host | {all} | {all} | 0.0.0.0 | 0.0.0.0 | trust | |
Поле PG_HBA
Чтобы изменить поле PG_HBA, в пользовательском интерфейсе ADCM откройте страницу Clusters, выберите кластер ADPG и перейдите на вкладку Services. Выберите сервис ADPG. Кликните поле PG_HBA в дереве Configuration на вкладке Primary configuration.

Введите запись в открывшемся окне и нажмите Apply.

Для сохранения изменений нажмите Save.

Выполните действие Reconfigure & Restart, чтобы применить изменения.