Обзор конфигурации 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. Записи host соответствуют разным типам подключения. Это могут быть подключения как с использованием SSL или GSSAPI, так и без

hostssl

Соответствует подключениям через TCP/IP, если подключение использует шифрование SSL. Поддержка SSL включается в ADPG во время сборки. Чтобы использовать hostssl, нужно включить SSL путем установки параметра конфигурации ssl, как описано в статье Включение SSL-шифрования. В противном случае запись hostssl игнорируется, за исключением предупреждения о том, что она не может соответствовать ни одному подключению

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

Выполняет аутентификацию SCRAM-SHA-256 для проверки пароля пользователя. См. Аутентификация по паролю

md5

Выполняет аутентификацию SCRAM-SHA-256 или MD5 для проверки пароля пользователя. См. Аутентификация по паролю

password

Требует от клиента предоставления незашифрованного пароля для аутентификации. Поскольку пароль отправляется в открытом виде по сети, его не следует использовать в ненадежных сетях. См. Аутентификация по паролю

gss

Использует GSSAPI для аутентификации пользователя. Доступно только для соединений TCP/IP. Может использоваться в сочетании с шифрованием GSSAPI. См. GSSAPI authentication

sspi

Использует SSPI для аутентификации пользователя. Доступно только для клиентов Windows. См. SSPI Authentication

ident

Получает имя пользователя операционной системы клиента, связываясь с сервером ident на клиенте. Система проверяет, соответствует ли оно запрошенному имени пользователя базы данных. Аутентификация ident может использоваться только для соединений TCP/IP. Если аутентификация ident указана для локальных соединений, вместо нее будет производиться аутентификация peer. См. Ident authentication

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

Запись будет заменена содержимым всех обработанных в алфавитном порядке файлов, найденных в указанной директории, если они не начинаются с . и не заканчиваются на .conf

Пример:

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.

Редактирование поля PG_HBA
Редактирование поля PG_HBA

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

Добавление записи
Добавление записи

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

Сохранение изменений
Сохранение изменений

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

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней