Аутентификация по паролю

ADPG поддерживает несколько методов аутентификации по паролю, которые отличаются тем, как пароль хранится на сервере и передается во время соединения. В таблице ниже перечислены поддерживаемые методы.

Методы аутентификации по паролю
Название Описание

scram-sha-256

Выполняется аутентификация scram-sha-256 в соответствии с RFC 7677. Она производится по схеме "вызов-ответ", которая предотвращает перехват паролей при ненадежных соединениях. Пароли хранятся на сервере в виде криптографического хеша. scram-sha-256 — наиболее безопасный из существующих на данный момент методов, но старые клиентские библиотеки его не поддерживают

md5

Использует менее безопасный механизм "вызов-ответ". Он предотвращает перехват паролей и предусматривает хранение паролей на сервере в зашифрованном виде, но не защищает в случае хищения хешей паролей с сервера. Алгоритм хеширования md5 также уязвим для коллизионных атак.

Метод md5 не поддерживает db_user_namespace

password

Отправляет пароль в незашифрованном виде. Этот метод уязвим для атак с перехватом пароля. Вы можете использовать метод password, только если соединение защищено шифрованием SSL

Настройка аутентификации

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

  • Файл pg_hba.conf, содержащий параметры клиентской аутентификации

  • Параметр password_encryption, который определяет алгоритм, используемый для шифрования паролей пользователей

Файл pg_hba.conf

Файл pg_hba.conf содержит набор записей, по одной на каждой строке. За подробным описанием полей записи обратитесь к статье Обзор конфигурации PG_HBA.

Для редактирования pg_hba.conf используйте пользовательский интерфейс ADCM. Откройте вкладку Clusters → ADPG cluster → Services → ADPG → Primary configuration и добавьте строки в поле PG_HBA. Следующая запись позволяет установить соединение по протоколу TCP/IP, с любыми базами данных, любым пользователям с адресов IPv4 и методом аутентификации scram-sha-256:

host  all  all 0.0.0.0/0 scram-sha-256

Нажмите Save на вкладке Configuration и выполните действие Reconfigure & Restart, чтобы применить изменения. Следующие строки добавятся в pg_data1/adpg16/pg_hba.conf:

# BEGIN Customs from ADCM
host  all  all 0.0.0.0/0 scram-sha-256
# END Customs from ADCM

Параметр password_encryption

Если вы устанавливаете пароль SQL-командой CREATE ROLE или ALTER ROLE, алгоритм шифрования пароля определяется параметром password_encryption. Возможные значения: scram-sha-256 (значение по умолчанию) и md5.

Если в качестве метода аутентификации в pg_hba.conf указан md5, но пароль пользователя на сервере зашифрован алгоритмом scram-sha-256, то используется аутентификация scram-sha-256 как наиболее безопасная.

Вы можете изменить параметр password_encryption через пользовательский интерфейс ADCM. Для этого откройте вкладку Clusters → ADPG cluster → Services → ADPG → Primary configuration, раскройте ноду ADPG configurations и добавьте в поле postgresql.conf новое значение password_encryption (см. Конфигурационные параметры). Следующая строка устанавливает алгоритм md5 для шифрования пароля:

password_encryption=md5

Вы также можете выполнить SQL-инструкцию приведенную ниже, чтобы изменить параметр password_encryption для текущей сессии.

SET password_encryption = 'scram-sha-256';

Установка и изменение паролей пользователей

Если вы не установили пароль для пользователя, его пароль будет равен NULL и аутентификация по паролю для этого пользователя завершится ошибкой.

Чтобы установить пароль для новой роли, укажите параметр PASSWORD в SQL-команде CREATE ROLE.

CREATE ROLE user1 WITH LOGIN PASSWORD 'password1';

Чтобы изменить пароль для существующей роли, выполните команду ALTER ROLE.

ALTER ROLE user1 WITH PASSWORD 'password2';

Метакоманда psql \password также изменяет пароль для авторизованной роли.

\password

После выполнения команды \password терминал выведет приглашение ввести новый пароль дважды:

Enter new password for user "postgres":
Enter it again:

Если введенные пароли совпадут, текущий пароль будет изменен.

Просмотр сохраненных паролей

Хеш пароля для каждого пользователя базы данных хранится в каталоге pg_authid. Вы можете выполнить следующую SQL-команду, чтобы получить список ролей и паролей:

SELECT rolname, rolpassword FROM pg_authid;

Вывод команды:

          rolname          |          rolpassword
---------------------------+--------------------------------------
 pg_database_owner         |
 pg_read_all_data          |
 pg_write_all_data         |
 pg_monitor                |
 pg_read_all_settings      |
 pg_read_all_stats         |
 pg_stat_scan_tables       |
 pg_read_server_files      |
 pg_write_server_files     |
 pg_execute_server_program |
 pg_signal_backend         |
 postgres                  | SCRAM-SHA-256$4096:2yHlw+fjx7PWll0dScESNA==$SETiIdi
xLSGgtE/EEk/5kfRBsIpu+09XuCDPWIFmAuE=:Fyy6OPtQmm1+Ms8ryqww47NT1YhLJ6/zik4iskkm3M
o=
 user_md5                  | md5ea4a7de3c817a0c8cc2670dab9aecc47
(13 rows)

Хеш пароля начинается с названия алгоритма шифрования. В этом примере пароль роли postgres зашифрован с помощью scram-sha-256, а роли user_md5 — с помощью алгоритма md5.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней