Файл сопоставлений имен пользователей

При использовании внешней системы аутентификации, например 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