20.2. Сопоставление имен пользователей#

20.2. Сопоставление имен пользователей

20.2. Сопоставление имен пользователей

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

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

map-name system-username database-username

Комментарии, пробелы и продолжения строк обрабатываются так же, как и в pg_hba.conf. map-name - это произвольное имя, которое будет использоваться для ссылки на это отображение в pg_hba.conf. Другие два поля указывают имя пользователя операционной системы и соответствующее имя пользователя базы данных. То же самое map-name может быть использовано несколько раз для указания нескольких отображений пользователей в одном отображении.

В отношении того, сколько пользователей базы данных может соответствовать одному пользователю операционной системы, нет ограничений, также как и наоборот. Таким образом, записи в карте следует рассматривать как означающие, что "этому пользователю операционной системы разрешено подключаться в качестве этого пользователя базы данных", а не подразумевать их эквивалентность. Подключение будет разрешено, если существует хотя бы одна запись в карте, которая связывает имя пользователя, полученное из внешней системы аутентификации, с именем пользователя базы данных, которое пользователь запросил для подключения.

Если поле system-username начинается с косой черты (/), оставшаяся часть поля рассматривается как регулярное выражение. (См. Раздел 9.7.3.1 для получения более подробной информации синтаксиса регулярных выражений в Tantor SE). Регулярное выражение может содержать один захват или заключенное в скобки подвыражение, которое затем может быть использовано в поле database-username как \1 (обратная косая черта и единица). Это позволяет сопоставлять несколько имен пользователей в одной строке, что особенно полезно для простых замен синтаксиса. Например, эти записи

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

будут удалять часть домена для пользователей с системными именами, оканчивающимися на @mydomain.com, и позволит любому пользователю, чье системное имя оканчивается на @otherdomain.com, войти в систему как guest.

Подсказка

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

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

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

Файл pg_ident.conf может использоваться вместе с файлом pg_hba.conf в Пример 20.1. В этом примере, любой пользователь, вошедший в систему с машины в сети 192.168 и не имеющий имени пользователя операционной системы bryanh, ann или robert, не будет получать доступ. Пользователю Unix robert будет разрешен доступ только при попытке подключения от имени пользователя Tantor SE bob, а не как robert или кто-либо другой. ann будет разрешено подключаться только как ann. Пользователю bryanh будет разрешено подключаться как bryanh или как guest1.

Пример 20.2. Пример файла 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