Файл сопоставлений имен пользователей
При использовании внешней системы аутентификации, например Ident или GSSAPI, имя пользователя операционной системы, устанавливающего подключение, может не совпадать с целевым именем пользователя (роли) базы данных. В этом случае можно применить сопоставление имен пользователей ОС и пользователей базы данных. Чтобы воспользоваться этим сопоставлением, следует указать map=имя-сопоставления в поле параметров в файле pg_hba.conf. Этот параметр поддерживается для всех методов аутентификации, принимающих внешние имена пользователей. Поскольку для разных подключений могут понадобиться разные сопоставления, имя применяемого сопоставления задается в параметре имя-сопоставления в pg_hba.conf для каждого отдельного подключения.
Сопоставления имен пользователей определяются в файле сопоставления ident, который по умолчанию называется pg_ident.conf и хранится в каталоге данных кластера. (Однако этот файл можно поместить и в другое место; см. описание параметра конфигурации ident_file.) Файл сопоставления ident содержит строки общего вида:
имя-сопоставления имя-пользователя-ос имя-пользователя-бд
Синтаксис комментариев, пробелов и переносов строк такой же, как в файле pg_hba.conf. имя-сопоставления является произвольным именем, по которому будут обращаться к этому сопоставлению в pg_hba.conf. Два других поля указывают имя пользователя операционной системы и соответствующее имя пользователя базы данных. имя-сопоставления можно использовать неоднократно, чтобы задать несколько сопоставлений имен пользователей в рамках одного файла сопоставления.
Нет никаких ограничений касательно количества пользователей баз данных, на которые может ссылаться пользователь операционной системы, и наоборот. В связи с этим записи в файле сопоставления скорее имеют смысл «этому пользователю операционной системы разрешено подключаться под этим именем пользователя базы данных», нежели подразумевают, что эти имена пользователей равнозначны. Подключение будет разрешено, если в файле сопоставления есть запись, соединяющая имя пользователя, полученное от внешней системы аутентификации, с именем пользователя базы данных, под которым этот пользователь хочет подключиться.
Если поле имя-пользователя-ос начинается со слэша (/), оставшаяся часть поля рассматривается как регулярное выражение. (Более подробную информацию о синтаксисе регулярных выражений QHB см. в подразделе Подробное описание регулярных выражений.) Регулярное выражение может включать в себя одно обобщение или заключенное в скобки вложенное выражение, на которое можно сослаться в поле имя-пользователя-бд, написав \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 из Примера 1, показан в Примере 2. В этом примере любому, выполнившему вход в систему на компьютере в сети 192.168 под именем пользователя операционной системы, отличным от bryanh, ann или robert, будет отказано в доступе. Пользователь ОС Unix robert получит доступ, только когда попытается подключиться как пользователь QHB bob, но не как robert или какой-либо другой пользователь. Пользователь ann сможет подключиться только как ann. Пользователь bryanh сможет подключиться как bryanh или как guest1.
Пример 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