Обзор 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 на мастер-хосте следующим образом:
-
Переключитесь на пользователя
gpadmin
:$ su - gpadmin
-
Откройте файл pg_hba.conf в текстовом редакторе:
$ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
-
Добавьте в файл строку для каждого типа подключения, который вы хотите разрешить, например:
# 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
-
Сохраните и закройте файл.
-
Перезагрузите конфигурацию с помощью
gpstop
, чтобы применить изменения:$ gpstop -u