Аутентификация по паролю
ADPG поддерживает несколько методов аутентификации по паролю, которые отличаются тем, как пароль хранится на сервере и передается во время соединения. В таблице ниже перечислены поддерживаемые методы.
Название | Описание |
---|---|
scram-sha-256 |
Выполняется аутентификация |
md5 |
Использует менее безопасный механизм "вызов-ответ". Он предотвращает перехват паролей и предусматривает хранение паролей на сервере в зашифрованном виде, но не защищает в случае хищения хешей паролей с сервера. Алгоритм хеширования md5 также уязвим для коллизионных атак. Метод |
password |
Отправляет пароль в незашифрованном виде. Этот метод уязвим для атак с перехватом пароля. Вы можете использовать метод |
Настройка аутентификации
Следующие опции управляют настройками аутентификации по паролю:
-
Файл 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
.