Главная » OpenSource базы данных » PostgreSQL » Карты имен пользователей (User Name Maps) в аутентификации в PostgreSQL (pg_ident.conf)

📑 Карты имен пользователей (User Name Maps) в аутентификации в PostgreSQL (pg_ident.conf)

При использовании внешней системы аутентификации, такой как Ident или GSSAPI, имя пользователя операционной системы, инициировавшего соединение, может не совпадать с именем пользователя (роли) базы данных, который будет использоваться. В этом случае можно применить карту имен пользователей для сопоставления имени пользователя операционной системы с пользователем базы данных. Чтобы использовать сопоставление имен пользователей, укажите map=map-name в поле параметров в pg_hba.conf. Этот параметр поддерживается для всех методов аутентификации, которые получают имена внешних пользователей. Поскольку для разных соединений могут потребоваться разные сопоставления, имя используемой сопоставления указывается в параметре map-name в pg_hba.conf, чтобы указать, какую карту следует использовать для каждого отдельного подключения.

Карты имен пользователей определяются в файле карты идентификаторов, который по умолчанию называется pg_ident.conf и хранится в каталоге данных кластера. (Однако файл карты можно разместить в другом месте; см. параметр конфигурации ident_file.) Файл карты ident содержит строки общего вида:

map-name system-username database-username
include file
include_if_exists file
include_dir directory

Комментарии, пробелы и продолжения строк обрабатываются так же, как в pg_hba.conf. Имя карты — это произвольное имя, которое будет использоваться для ссылки на это сопоставление в pg_hba.conf. В двух других полях указывается имя пользователя операционной системы и соответствующее имя пользователя базы данных. Одно и то же имя карты можно использовать неоднократно для указания нескольких пользовательских сопоставлений на одной карте.

Что касается pg_hba.conf, строки в этом файле могут включать директивы по тем же правилам.

Нет никаких ограничений относительно того, скольким пользователям базы данных может соответствовать данный пользователь операционной системы, и наоборот. Таким образом, записи на карте следует рассматривать как означающие «этому пользователю операционной системы разрешено подключение как этому пользователю базы данных», а не как подразумевающие, что они эквивалентны. Соединение будет разрешено, если существует какая-либо запись карты, которая связывает имя пользователя, полученное из внешней системы аутентификации, с именем пользователя базы данных, под которым пользователь запросил подключение. Значение all можно использовать в качестве имени пользователя базы данных, чтобы указать, что если системный пользователь совпадает, то этому пользователю разрешено войти в систему как любой из существующих пользователей базы данных. При цитировании всех ключевое слово теряет свое особое значение.

Если имя пользователя базы данных начинается с символа +, то пользователь операционной системы может войти в систему как любой пользователь, принадлежащий к этой роли, аналогично тому, как имена пользователей, начинающиеся с +, обрабатываются в pg_hba.conf. Таким образом, знак + означает «соответствует любой из ролей, которые прямо или косвенно являются членами этой роли», тогда как имя без знака + соответствует только этой конкретной роли. Цитирование имени пользователя, начинающегося с +, приводит к тому, что + теряет свое особое значение.

Если поле системного имени пользователя начинается с косой черты (/), оставшаяся часть поля рассматривается как регулярное выражение. Регулярное выражение может включать в себя один захват или подвыражение в скобках, на которое затем можно ссылаться в поле имени пользователя базы данных как \1 (обратная косая черта — один). Это позволяет отображать несколько имен пользователей в одной строке, что особенно полезно для простых синтаксических замен. Например, эти записи

mymap /^(.*)@mydomain\.com$ \1
mymap /^(.*)@otherdomain\.com$ guest

удалит доменную часть для пользователей с системными именами, заканчивающимися на @mydomain.com, и позволит любому пользователю, чье системное имя заканчивается на @otherdomain.com, войти в систему в качестве гостя. Цитирование имени пользователя базы данных, содержащего \1, не приводит к тому, что \1 теряет свое особое значение.

Если поле имени пользователя базы данных начинается с косой черты (/), оставшаяся часть поля рассматривается как регулярное выражение. Невозможно использовать \1 для использования захвата регулярного выражения по имени системного пользователя для регулярного выражения по имени пользователя базы данных.

Tip

Имейте в виду, что по умолчанию регулярное выражение может соответствовать только части строки. Обычно разумно использовать ^ и $, как показано в приведенном выше примере, чтобы обеспечить соответствие всему имени пользователя системы.

Файл pg_ident.conf считывается при запуске и когда основной серверный процесс получает сигнал SIGHUP. Если вы редактируете файл в активной системе, вам нужно будет подать сигнал почтмастеру (используя pg_ctl reload, вызывая функцию SQL pg_reload_conf() или используя kill -HUP), чтобы он перечитал файл.

Системное представление pg_ident_file_mappings может быть полезно для предварительного тестирования изменений в файле pg_ident.conf или для диагностики проблем, если загрузка файла не дала желаемого эффекта. Строки в представлении с ненулевыми полями ошибок указывают на проблемы в соответствующих строках файла.

Файл pg_ident.conf можно использовать вместе с файлом pg_hba.conf. В этом примере любой, кто вошел в систему как пользователь операционной системы 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

 

При перепечатке просьба вставлять активные ссылки на oslogic.ru
Copyright oslogic.ru © 2024 . All Rights Reserved.