20.2. Файл сопоставления имён пользователей
Когда используется внешняя система аутентификации, например Ident или GSSAPI, имя пользователя операционной системы, устанавливающего подключение, может не совпадать с именем целевого пользователя (роли) базы данных. В этом случае можно применить сопоставление имён пользователей, чтобы сменить имя пользователя операционной системы на имя пользователя БД. Чтобы задействовать сопоставление имён, укажите map
=имя-сопоставления
в поле параметров в pg_hba.conf
. Этот параметр поддерживается для всех методов аутентификации, которые принимают внешние имена пользователей. Так как для разных подключений могут требоваться разные сопоставления, сопоставление определяется параметром имя-сопоставления
в pg_hba.conf
для каждого отдельного подключения.
Сопоставления имён пользователя определяются в файле сопоставления ident, который по умолчанию называется pg_ident.conf
и хранится в каталоге данных кластера. (Файл сопоставления может быть помещён и в другое место, обратитесь к информации о настройке параметра ident_file.) Файл сопоставления ident содержит строки общей формы:
map-name
system-username
database-username
Комментарии и пробелы применяются так же, как и в файле pg_hba.conf
. map-name
является произвольным именем, на которое будет ссылаться файл сопоставления файла pg_hba.conf
. Два других поля указывают имя пользователя операционной системы и соответствующее имя пользователя базы данных. Имя map-name
может быть использовано неоднократно, чтобы указывать множественные сопоставления пользовательских имён в рамках одного файла сопоставления.
Нет никаких ограничений по количеству пользователей баз данных, на которые может ссылаться пользователь операционной системы, и наоборот. Тем не менее записи в файле скорее подразумевают, что « пользователь этой операционной системы может подключиться как пользователь этой базы данных», нежели показывают, что эти имена пользователей эквивалентны. Подключение разрешается, если существует запись в файле сопоставления, соединяющая имя, полученное от внешней системы аутентификации, с именем пользователя базы данных, под которым пользователь хочет подключиться.
Если поле system-username
начинается со знака (/
), оставшаяся его часть рассматривается как регулярное выражение. (Подробнее синтаксис регулярных выражений PostgreSQL описан в Подразделе 9.7.3.1.) Регулярное выражение может включать в себя одну группу, или заключённое в скобки подвыражение, на которое можно сослаться в поле database-username
, написав \1
(с одной обратной косой). Это позволяет сопоставить несколько имён пользователя с одной строкой, что особенно удобно для простых замен. Например, эти строки
mymap /^(.*)@mydomain\.com$ \1 mymap /^(.*)@otherdomain\.com$ guest
удалят часть домена для имён пользователей, которые заканчиваются на @mydomain.com
, и позволят пользователям, чьё имя пользователя системы заканчивается на @otherdomain.com
, подключиться как guest
.
Подсказка
Помните, что по умолчанию, регулярное выражение может совпасть только с частью строки. Разумным выходом будет использование символов ^
и $
, как показано в примере выше, для принудительного совпадения со всем именем пользователя операционной системы
Файл pg_ident.conf
прочитывается при запуске системы, а также в тот момент, когда основной сервер получает сигнал SIGHUP. Если вы редактируете файл во время работы системы, необходимо послать сигнал процессу postmaster (используя pg_ctl reload
, вызвав SQL-функцию pg_reload_conf()
или выполнив kill -HUP
), чтобы он прочел обновлённый файл.
Файл pg_ident.conf
, который может быть использован в сочетании с файлом pg_hba.conf
(см. Пример 20.1), показан в Примере 20.2. В этом примере любым пользователям компьютеров в сети 192.168 с именами, отличными от bryanh
, ann
или robert
, будет отказано в доступе. Пользователь системы robert
получит доступ только тогда, когда подключается как пользователь PostgreSQL bob
, а не как robert
, или какой-либо другой пользователь. Пользователь ann
сможет подключиться только как ann
. Пользователь bryanh
сможет подключиться как bryanh
или как guest1
.
Пример 20.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