Карты сопоставления имен пользователей
Эта страница переведена при помощи нейросети GigaChat.
При использовании внешней системы аутентификации, такой как Ident или GSSAPI, имя пользователя операционной системы, инициировавшего соединение, может не совпадать с именем пользователя базы данных (роли), которое должно использоваться. В этом случае можно применить карту имен пользователей для сопоставления имени пользователя операционной системы с пользователем базы данных. Чтобы использовать сопоставление имен пользователей, укажите map
=map-name
в поле параметров в pg_hba.conf
. Эта опция поддерживается для всех методов аутентификации, которые получают внешние имена пользователей. Поскольку для разных соединений могут потребоваться разные сопоставления, имя карты, которую необходимо использовать, указывается в параметре map-name
в pg_hba.conf
, чтобы указать, какую карту использовать для каждого отдельного соединения.
Карты сопоставления имен пользователей определяются в файле карты идентификаторов, который по умолчанию называется pg_ident.conf
и хранится в каталоге данных кластера. (Однако возможно разместить файл карты в другом месте; см. параметр конфигурации ident_file.) Файл карты идентификаторов содержит строки общего вида:
map-name system-username database-username
include file
include_if_exists file
include_dir directory
Комментарии, пробелы и продолжения строк обрабатываются так же, как в pg_hba.conf
. map-name
--- это произвольное имя, которое будет использоваться для ссылки на это сопоставление в pg_hba.conf
. Два других поля указывают имя пользователя операционной системы и соответствующее имя пользователя базы данных. Один и тот же map-name
может быть использован повторно для указания нескольких сопоставлений пользователей в одной карте.
Что касается pg_hba.conf
, строки в этом файле могут быть директивами включения, которые следуют тем же правилам.
Файл pg_ident.conf
прочитывается при запуске системы, а также в тот момент, когда основной сервер получает сигнал SIGHUP. Если редактируется файл во время работы системы, необходимо послать сигнал процессу postmaster (используя pg_ctl reload
, вызвав SQL-функцию pg_reload_conf()
или выполнив kill -HUP), чтобы он прочел обновленный файл.
Системное представление pg_ident_file_mappings
может быть полезно для предварительной проверки изменений в файле pg_ident.conf
или для диагностики проблем, когда перезагрузка этого файла не дает желаемого эффекта. Строки в этом представлении, содержащие в поле error
не NULL
, указывают на проблемы в соответствующих строках файла.
Нет никаких ограничений по количеству пользователей баз данных, на которые может ссылаться пользователь операционной системы, и наоборот. Тем не менее записи в файле скорее подразумевают, что «пользователь этой операционной системы может подключиться как пользователь этой базы данных», нежели показывают, что эти имена пользователей эквивалентны. Подключение разрешается, если существует запись в файле сопоставления, соединяющая имя, полученное от внешней системы аутентификации, с именем пользователя базы данных, под которым пользователь хочет подключиться. Значение all
можно использовать в качестве имени-пользователя-БД, чтобы указать, что если оно совпадает с именем-системного-пользователя, то этому пользователю разрешено входить в систему как любому из существующих пользователей базы данных. Ключевое слово all
теряет свое особое значение.
Если имя-пользователя-БД начинается с символа +
, пользователь операционной системы может войти в систему как любой пользователь, включенный в эту роль, аналогично тому, как имена пользователей, начинающиеся с +
, обрабатываются в pg_hba.conf
. Таким образом, знак +
означает «совпадение любых ролей, которые прямо или косвенно являются членами роли», тогда как имя без знака +
является подходящим только для этой конкретной роли. Заключение имени пользователя, начинающегося с +
, в кавычки приводит к тому, что +
теряет свое особое значение.
В регулярном выражении может быть одна захватывающая подвыражение или подвыражение в скобках, которое затем можно сослаться в поле database-username
как \1
(обратная косая черта-один). Это позволяет сопоставлять несколько имен пользователей в одной строке, что особенно полезно для простых синтаксических замен.
Например, удалит доменную часть для пользователей с системными именами пользователей, которые заканчиваются на @mydomain.com
, и разрешит любому пользователю, чье системное имя заканчивается на @otherdomain.com
, войти в систему как guest
.
mymap /^(.*)@mydomain\.com$ \1
mymap /^(.*)@otherdomain\.com$ guest
Имейте в виду, что по умолчанию регулярное выражение может соответствовать только части строки. Обычно целесообразно использовать ^
и $
, как показано в приведенном выше примере, чтобы заставить соответствие быть ко всему имени системного пользователя.
Файл pg_ident.conf
считывается при запуске и когда основной серверный процесс получает сигнал SIGHUP. При редактировании файла в активной системе необходимо послать сигнал постмастеру (с использованием команд pg_ctl reload
, вызова SQL-функции pg_reload_conf()
или отправки сигнала kill -HUP
) для перечитывания файла.
Представление системы pg_ident_file_mappings
может быть полезно для предварительного тестирования изменений файла pg_ident.conf
, или для диагностики проблем, если загрузка файла не дала желаемого эффекта. Строки в представлении с непустыми полями error
указывают на проблемы в соответствующих строках файла.
Файл, который можно использовать вместе с файлом pg_hba.conf
в примере записи pg_hba.conf, показан в Примере «*Пример файла pg_ident.conf». В этом примере любому, кто вошел в систему на машине в сети 192.168, у которой нет имени пользователя операционной системы bryanh
, ann
или robert
, не будет предоставлен доступ. Пользователь Unix robert
сможет получить доступ только тогда, когда он попытается подключиться как пользователь PostgreSQL bob
, а не как robert
или кто-либо еще. ann
сможет подключаться только как ann
. Пользователь bryanh
сможет подключаться либо как bryanh
, либо как guest1
.
Пример файла pg_ident.conf
:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
omicron bryanh bryanh
omicron ann ann
# bob has user name robert on these machines
omicron robert bob
# bryanh can also connect as guest1
omicron bryanh guest1