Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Обзор pg_ident.conf

Андрей Аксенов

Файл pg_ident.conf позволяет настроить сопоставление имен пользователей для методов аутентификации, использующих внешние идентификаторы: имена пользователей операционной системы, принципалы Kerberos и клиентские SSL-сертификаты. Сопоставления применяются в соответствии с правилами, заданными в файле pg_hba.conf.

На мастер-хосте файл pg_ident.conf находится в каталоге $MASTER_DATA_DIRECTORY.

ПРИМЕЧАНИЕ

Вы можете получить дополнительную информацию о файле pg_ident.conf в соответствующем разделе документации PostgreSQL: User Name Maps.

Поддерживаемые методы аутентификации

Сопоставление имен пользователей поддерживается следующими методами аутентификации:

Обзор формата pg_ident.conf

Для включения сопоставления имен пользователей необходимо изменить файлы pg_hba.conf и pg_ident.conf. В pg_hba.conf имя сопоставления задается через параметр аутентификации map:

# pg_hba.conf
# connection-type  database  user  address  auth-method  auth-options
...                ...       ...   ...      ...          map=<map-name>

В файле pg_ident.conf определите правило сопоставления, используя то же имя:

# pg_ident.conf
<map-name>    <system-username>    <database-username>
...

где:

  • map-name — произвольное имя сопоставления, на которое можно ссылаться в файле pg_hba.conf.

  • system-username — внешний идентификатор пользователя, полученный от метода аутентификации (например, системное имя пользователя, Kerberos-принципал или CN из SSL-сертификата).

  • database-username — соответствующее имя пользователя базы данных.

Одно и то же значение map-name можно использовать для определения нескольких сопоставлений.

Количество пользователей базы данных, которым может соответствовать один внешний идентификатор, не ограничено (и наоборот). Каждая запись в файле сопоставления определяет явное разрешение: указанный внешний идентификатор может войти как соответствующий пользователь базы данных. Это не означает полную идентичность или эквивалентность двух учетных записей.

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

Настройка сопоставления пользователей

В этом разделе приведен пример настройки сопоставления имен пользователей для подключений, использующих метод аутентификации ident.

Создание нового пользователя операционной системы

Перед определением сопоставления в pg_ident.conf создайте пользователя операционной системы:

  1. Войдите на мастер-хост под пользователем с правами sudo.

  2. Создайте системного пользователя dbadmin:

    $ sudo useradd dbadmin -r -m -s /bin/bash

Редактирование pg_hba.conf и pg_ident.conf

  1. Переключитесь на пользователя gpadmin:

    $ sudo su - gpadmin
  2. Откройте pg_hba.conf для редактирования:

    $ vi $MASTER_DATA_DIRECTORY/pg_hba.conf

    Добавьте следующую строку, чтобы включить сопоставление пользователей для метода аутентификации ident:

    # connection-type  database  user     auth-method  auth-options
    local              all       gpadmin  ident        map=admin_map
  3. Откройте файл pg_ident.conf:

    $ vi $MASTER_DATA_DIRECTORY/pg_ident.conf

    Добавьте следующие записи сопоставления:

    # MAPNAME    SYSTEM-USERNAME    PG-USERNAME
    admin_map    gpadmin            gpadmin
    admin_map    dbadmin            gpadmin

    Эти записи позволяют системным пользователям gpadmin и dbadmin подключаться от имени роли базы данных gpadmin, используя сопоставление admin_map.

  4. Перезагрузите конфигурацию для применения изменений:

    $ gpstop -u

Подключение к базе данных

  1. Переключитесь на созданного пользователя dbadmin:

    $ sudo su - dbadmin
  2. Настройте окружение Greengage DB:

    $ source /usr/local/gpdb/greengage_path.sh

    Путь зависит от того, как был установлен Greengage DB.

  3. Попробуйте подключиться без указания пользователя базы данных. По умолчанию psql использует имя текущего пользователя операционной системы:

    $ psql postgres

    Попытка подключения завершается ошибкой, поскольку pg_hba.conf разрешает подключения только для пользователя базы данных gpadmin:

    FATAL:  no pg_hba.conf entry for host "[local]", user "dbadmin", database "postgres", SSL off
  4. Попробуйте подключиться как gpadmin:

    $ psql postgres -U gpadmin

    Подключение выполняется успешно, поскольку для пользователя операционной системы dbadmin настроено сопоставление с пользователем базы данных gpadmin:

    psql (9.4.26)
    Type "help" for help.
    
    postgres=#

Регулярные выражения

Если значение в поле system-username начинается с косой черты (/), остальная часть интерпретируется как регулярное выражение. Подробности о синтаксисе регулярных выражений PostgreSQL см. в разделе Regular Expression Details.

Регулярное выражение может включать одну группу (подвыражение в скобках), на которую можно ссылаться в поле database-username как \1. Это позволяет сопоставлять несколько имен пользователей в одной строке, что особенно удобно для подстановок.

Пример pg_hba.conf ниже включает аутентификацию GSSAPI для пользователей из группы gss_users:

# connection-type  database  user        address  auth-method  auth-options
host               all       +gss_users  samenet  gss          include_realm=1 krb_realm=EXAMPLE.COM map=user_map

Параметр include_realm=1 сохраняет область (realm) Kerberos в аутентифицированном принципале пользователя. Чтобы удалить область из имен пользователей, оканчивающихся на @EXAMPLE.COM, обновите pg_ident.conf следующим образом:

# MAPNAME    SYSTEM-USERNAME             PG-USERNAME
user_map     /^(.*)@EXAMPLE\.COM$        \1

Чтобы разрешить любому пользователю с системным именем, заканчивающимся на @OTHERDOMAIN.ORG, подключаться как guest, добавьте следующее сопоставление:

# MAPNAME    SYSTEM-USERNAME             PG-USERNAME
user_map     /^(.*)@OTHERDOMAIN\.ORG$    guest
РЕКОМЕНДАЦИЯ

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