Github

Обзор pg_hba.conf

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

Greengage DB (на основе Greenplum) использует стандартный файл авторизации PostgreSQL pg_hba.conf для клиентских подключений и аутентификации. На мастер-хосте файл pg_hba.conf находится в каталоге $MASTER_DATA_DIRECTORY. Сегменты также имеют собственные файлы pg_hba.conf. Однако, поскольку сегменты не предназначены для клиентских подключений, вам не нужно редактировать эти файлы.

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

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

Файл pg_hba.conf содержит записи в определенном формате. Формат зависит от того, используется ли локальное (сокет домена Unix) или удаленное (TCP/IP) подключение.

Локальное подключение

Для локальных подключений формат файла pg_hba.conf следующий:

# connection-type  database  user  auth-method  [auth-options]
...

Значение connection-type должно быть установлено в local.

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

# connection-type  database  user     auth-method
local              all       gpadmin  trust

Удаленное подключение

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

  • Поле address используется для указания адреса клиентского хоста:

    # connection-type  database  user  address  auth-method  [auth-options]
    ...
  • Вместо address могут использоваться поля IP-address и IP-mask:

    # connection-type  database  user  IP-address  IP-mask  auth-method  [auth-options]
    ...

Возможные типы удаленных подключений описаны в разделе connection-type.

Данный пример показывает, как разрешить пользователю gpadmin подключаться к любой базе данных с хоста с IP-адресом из подсети 192.168.1.0/24. Для аутентификации клиент также должен предоставить MD5-хешированный пароль.

# connection-type  database  user     address         auth-method
host               all       gpadmin  192.168.1.0/24  md5

Поля файла pg_hba.conf

Этот раздел описывает поля файла pg_hba.conf.

connection-type

Поле connection-type соответствует различным типам подключений. Возможные значения:

  • local — подключения с использованием сокета домена Unix.

  • host — подключения по TCP/IP. Чтобы разрешить подключения по TCP/IP, убедитесь, что ваш кластер запущен с корректным значением параметра конфигурации сервера listen_addresses.

  • hostssl — подключения по TCP/IP с использованием SSL-шифрования.

  • hostnossl — подключения по TCP/IP без использования SSL-шифрования.

Пример

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

# connection-type  database  user     address         auth-method
local              all       gpadmin                  trust
host               all       gpadmin  192.168.1.0/24  md5
  • Локально пользователь gpadmin может подключаться без пароля или любой другой аутентификации.

  • Для удаленных подключений пользователь gpadmin должен предоставить MD5-хешированный пароль и может подключаться с хоста с IP-адресом из подсети 192.168.1.0/24.

database

Поле database задает имена баз данных для данной записи. Это поле принимает следующие значения:

  • Имя базы данных. Вы также можете указать несколько имен баз данных, разделив их запятыми.

  • all — любая база данных.

  • sameuser — пользователь может подключаться только к базе данных с таким же именем, как его имя пользователя. Например, если имя пользователя alice, он может подключаться только к базе данных с именем alice.

  • samerole — пользователь может подключаться к любой базе данных, если он является членом роли (группы) с таким же именем, как имя базы данных. Например, если база данных называется sales, то подключаться к ней смогут только пользователи, которые являются членами роли sales.

  • Имя файла, содержащего имена баз данных. В этом случае перед именем файла нужно добавить символ @.

Пример 1

Данная конфигурация позволяет пользователю alice подключаться к базам данных sales и finance:

# connection-type  database       user   address          auth-method
host               sales,finance  alice  192.168.10.0/24  md5

Пример 2

Предположим, что имена баз данных хранятся в файле $MASTER_DATA_DIRECTORY/testdbs:

# testdbs
sales,finance

В этом случае вы можете указать этот файл в pg_hba.conf следующим образом:

# pg_hba.conf
# connection-type  database  user   address          auth-method
host               @testdbs  alice  192.168.10.0/24  md5

user

Поле user задает, каким ролям базы данных соответствует эта запись. Это поле принимает следующие значения:

  • Имя роли. Можно указать несколько имен ролей, разделив их запятыми. Если указанная роль является группой и вы хотите включить всех членов группы, добавьте + перед именем роли.

  • all — любая роль.

  • Имя файла, содержащего имена ролей. В этом случае перед именем файла нужно добавить @.

Пример

Данная конфигурация позволяет всем пользователям из группы sales_team подключаться к базе данных sales:

# connection-type  database       user         address          auth-method
host               sales          +sales_team  192.168.10.0/24  md5

address

Поле address задает адреса клиентских хостов. address может принимать следующие значения:

  • Диапазон IP-адресов в нотации CIDR (IP-address/mask-length).

  • Имя хоста.

  • all — любой IP-адрес.

  • samehost — любой из IP-адресов сервера.

  • samenet — любой IP-адрес из любой подсети, к которым сервер подключен напрямую.

Вы можете использовать поля IP-address и IP-mask вместо address.

ПРИМЕЧАНИЕ

Поле address применяется к типам подключений host, hostssl и hostnossl (см. connection-type).

Пример 1

Данная конфигурация позволяет пользователю alice подключаться к базе данных sales только с хоста с IP-адресом 192.168.10.55:

# connection-type  database  user   address           auth-method
host               sales     alice  192.168.10.55/32  md5

Пример 2

Данная конфигурация позволяет пользователю alice подключиться к базе данных sales с хоста с IP-адресом из подсети 192.168.10.0/24:

# connection-type  database  user   address          auth-method
host               sales     alice  192.168.10.0/24  md5

Пример 3

Данная конфигурация позволяет пользователю alice подключаться к базе данных sales с хоста, имя которого оканчивается на example.com:

# connection-type  database  user   address       auth-method
host               sales     alice  .example.com  md5

IP-address

Поле IP-address устанавливает IP-адреса клиентских хостов. Данное поле и поле IP-mask могут использоваться как альтернатива заданию адреса в CIDR-нотации в поле address. В этом случае IP-mask задает маску вместо ее длины.

ПРИМЕЧАНИЕ

IP-address и IP-mask применяются к типам подключений host, hostssl и hostnossl (см. connection-type).

Пример

Данная конфигурация позволяет пользователю alice подключаться к базе данных sales только с хоста с IP-адресом 192.168.10.55:

# connection-type  database  user   IP-address     IP-mask          auth-method
host               sales     alice  192.168.10.55  255.255.255.255  md5

IP-mask

Поле IP-mask задает маску подсети, применяемую к IP-address.

auth-method

Поле auth-method задает метод аутентификации, используемый для данной записи. Возможные значения перечислены в разделе Методы аутентификации.

Пример

Данная конфигурация требует использования SCRAM-SHA-256-аутентификации для проверки пароля пользователя:

# connection-type  database  user   address           auth-method
host               sales     alice  192.168.10.55/32  scram-sha-256

auth-options

Поле auth-options задает параметры для указанного auth-method.

Пример

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

# pg_hba.conf
# connection-type  database  user      address          auth-method  auth-options
host               sales     alice_db  192.168.10.0/24  ident        map=testmap

Поле auth-options устанавливает, что testmap используется для сопоставления пользователей операционной системы и базы данных. Фактическое сопоставление определяется в файле pg_ident.conf:

# pg_ident.conf
# MAPNAME  SYSTEM-USERNAME  PG-USERNAME
testmap    alice            alice_db

Методы аутентификации

Вы можете задать метод аутентификации в поле auth-method. В этом разделе перечислены доступные методы аутентификации.

trust

Разрешить подключение без пароля или любой другой аутентификации. Этот метод аутентификации необходим для роли gpadmin и для утилит Greengage DB (например, gpinitsystem, gpstop или gpstart), которым требуется подключаться к другим хостам без ввода пароля.

reject

Отклонить любое подключение. Вы можете использовать этот метод, чтобы заблокировать конкретный хост, при этом разрешив остальным хостам подключаться.

password

Использовать незашифрованный пароль для аутентификации пользователя. Узнайте больше в разделе Аутентификация по паролю.

md5

Использовать MD5 или SCRAM-SHA-256-аутентификацию для проверки пароля пользователя. Узнайте больше в разделе Аутентификация по паролю.

scram-sha-256

Использовать SCRAM-SHA-256-аутентификацию для проверки пароля пользователя. Узнайте больше в разделе Аутентификация по паролю.

ident

Использовать имя пользователя операционной системы клиента для аутентификации. Использование ident для удаленных подключений по TCP/IP требует, чтобы на хосте клиента работал Ident-сервис (например, oidentd).

gss

Использовать GSSAPI для аутентификации пользователя. Этот метод аутентификации доступен только для TCP/IP-подключений. Узнайте больше в следующих разделах:

ldap

Использовать LDAP-сервер для аутентификации пользователя. Узнайте больше в разделе LDAP-аутентификация.

radius

Использовать RADIUS-сервер для аутентификации пользователя.

cert

Использовать клиентские SSL-сертификаты для аутентификации пользователя. Узнайте больше в разделе Аутентификация по SSL-сертификату.

pam

Использовать службу Pluggable authentication modules (PAM), предоставляемую операционной системой, для аутентификации пользователя.

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

Чтобы настроить доступ пользователей к базам данных, отредактируйте файл pg_hba.conf на мастер-хосте следующим образом:

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

    $ su - gpadmin
  2. Откройте файл pg_hba.conf в текстовом редакторе:

    $ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
  3. Добавьте в файл строку для каждого типа подключения, который вы хотите разрешить, например:

    # connection-type  database  user         address          auth-method
    host               all       dba          192.168.1.0/24   md5
    host               sales     +sales_team  192.168.10.0/24  scram-sha-256
  4. Сохраните и закройте файл.

  5. Перезагрузите конфигурацию с помощью gpstop, чтобы применить изменения:

    $ gpstop -u