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