При использовании внешней системы аутентификации, такой как Ident или GSSAPI, имя пользователя операционной системы, инициировавшего соединение, может отличаться от имени пользователя базы данных (роли), которое должно быть использовано. В этом случае для сопоставления имени пользователя операционной системы с именем пользователя базы данных можно применить карту соответствия имен. Для использования сопоставления имен пользователей укажите
map=имя-карты
в поле параметров в файле pg_hba.conf. Данный параметр поддерживается для всех методов аутентификации, использующих внешние имена пользователей. Поскольку для различных соединений могут потребоваться разные сопоставления, название используемой карты указывается в
имя-карты параметре в файле pg_hba.conf
для определения карты, используемой для каждого конкретного соединения.
Соответствия имен пользователей определяются в файле соответствия ident, который по умолчанию имеет имя
pg_ident.conf
и хранится в каталоге данных кластера. (Тем не менее, файл таблицы соответствий можно разместить и в другом месте; см. ident_file
параметр конфигурации.)
Файл соответствия ident содержит строки следующего общего формата:
имя-картыимя-пользователя-системыdatabase-usernameincludeфайлinclude_if_existsфайлinclude_dirкаталог
Комментарии, пробелы и переносы строк обрабатываются так же, как в
pg_hba.conf. Параметр
имя-карты — это произвольное имя, которое будет использоваться для ссылки на данное сопоставление в pg_hba.conf. Два других поля определяют имя пользователя операционной системы и соответствующее имя пользователя базы данных. Одно и то же значение имя-карты может использоваться многократно для определения нескольких сопоставлений пользователей в рамках одной таблицы соответствий.
Как и в случае с pg_hba.conf, строки в данном файле могут представлять собой директивы включения include, составленные по тем же правилам.
Файл pg_ident.conf данный файл считывается при запуске, а также в тех случаях, когда основной процесс сервера получает
SIGHUP
сигнал. Если файл редактируется в
работающей системе, необходимо отправить сигнал процессу postmaster
(используя команду pg_ctl reload, вызывая SQL-функцию
pg_reload_conf()или используя kill
-HUP) для повторного чтения файла системой.
Системное представление
pg_ident_file_mappings
может быть полезно для предварительной проверки изменений в файле
pg_ident.conf или для диагностики проблем, если загрузка файла не дала ожидаемого результата. Строки в представлении с
ненулевыми error полями указывают на наличие ошибок в соответствующих строках файла.
Не существует ограничений относительно того, скольким пользователям базы данных может соответствовать конкретный пользователь операционной системы, и наоборот. Таким образом, записи в карте соответствий следует рассматривать как означающие следующее: «данному пользователю операционной
системы разрешено подключаться в качестве этого пользователя базы данных», а не как указание на их эквивалентность. Соединение будет разрешено, если
в карте соответствий существует какая-либо запись, связывающая имя пользователя, полученное из
внешней системы аутентификации, с именем пользователя базы данных, под которым
пользователь запросил подключение. Значение all
может использоваться в качестве database-username для указания того,
что если имя-пользователя-системы совпадает, то данному
пользователю разрешено входить в систему под именем любого из существующих пользователей базы данных. Заключение в кавычки
all лишает ключевое слово его специального значения.
Если параметр database-username начинается с символа
+ , то пользователь операционной системы может войти в систему под именем
любого пользователя, принадлежащего к этой роли, аналогично тому, как имена пользователей, начинающиеся с
+ обрабатываются в pg_hba.conf.
Таким образом, параметр + символ означает «соответствие любой из ролей, которые прямо или косвенно являются членами данной роли», в то время как имя
без данного + символа соответствует только этой конкретной роли. Заключение в
кавычки имени пользователя, начинающегося с символа + приводит к тому, что
+ теряет свое специальное значение.
Если параметр имя-пользователя-системы начинается с косой черты (/),
оставшаяся часть поля обрабатывается как регулярное выражение.
(Подробнее см. Раздел 2.6.7.3.1 относительно
синтаксиса регулярных выражений Digital Q.DataBase) Регулярное выражение может содержать одну группу захвата или подвыражение в скобках, на которое затем можно сослаться в
поле database-username как \1 (обратная косая черта и единица). Это позволяет сопоставлять несколько имен пользователей в одной строке, что особенно полезно для простых синтаксических подстановок. Например, следующие записи
mymap /^(.*)@mydomain\.com$ \1 mymap /^(.*)@otherdomain\.com$ guest
удаляет доменную часть для пользователей, чьи системные имена заканчиваются на
@mydomain.com, и позволяет любому пользователю, системное имя которого заканчивается на
@otherdomain.com входить в систему как guest.
Заключение в кавычки значения, database-username содержащего
\1 не означает, что оно будет трактоваться как регулярное выражение
\1 теряет свое специальное значение.
Если параметр database-username поле начинается с
косой черты (/), остальная часть поля рассматривается
как регулярное выражение (подробнее о Раздел 2.6.7.3.1
см. в описании Digital Q.DataBaseсинтаксис регулярных выражений). Использование \1
использовать результаты захвата из регулярного выражения в
имя-пользователя-системы для регулярного выражения в database-username.
Следует учитывать, что по умолчанию регулярное выражение может соответствовать только части строки. Как правило, целесообразно использовать ^ и $, как показано в примере выше, чтобы обеспечить сопоставление с полным именем пользователя операционной системы.
Файл pg_ident.conf файл, который может использоваться совместно с pg_hba.conf файлом в Пример 3.5.1 показан в Пример 3.5.2. В данном примере любому пользователю, вошедшему в систему на компьютере в сети 192.168, чье имя пользователя операционной системы не bryanh, ann, или
robert не будет предоставлен доступ. Пользователю Unix
robert получит доступ только при попытке подключения в качестве Digital Q.DataBase пользователя bob, а не в качестве robert или кого-либо другого. ann будет разрешено подключаться только в качестве ann. Пользователь
bryanh будет разрешено подключение
bryanh либо под именем guest1.
Пример 3.5.2. Пример pg_ident.conf Файл
# MAPNAME SYSTEM-USERNAME PG-USERNAME omicron bryanh bryanh omicron ann ann # пользователь bob имеет имя robert на этих машинах omicron robert bob # bryanh также может подключаться как guest1 omicron bryanh guest1