Аутентификация по паролю
ADPG поддерживает несколько методов аутентификации по паролю, которые отличаются тем, как пароль хранится на сервере и передается во время соединения. В таблице ниже перечислены поддерживаемые методы.
Название | Описание |
---|---|
scram-sha-256 |
Выполняется аутентификация |
md5 |
Использует менее безопасный механизм «вызов-ответ». Он предотвращает перехват паролей и предусматривает хранение паролей на сервере в зашифрованном виде, но не защищает в случае хищения хешей паролей с сервера. Алгоритм хеширования md5 также уязвим для коллизионных атак. Метод |
password |
Отправляет пароль в незашифрованном виде. Этот метод уязвим для атак с перехватом пароля. Вы можете использовать метод |
Настройка аутентификации
Следующие опции управляют настройками аутентификации по паролю:
-
Файл pg_hba.conf, содержащий параметры клиентской аутентификации
-
Параметр password_encryption, который определяет алгоритм, используемый для шифрования паролей пользователей
Файл pg_hba.conf
Файл pg_hba.conf содержит набор записей, по одной на каждой строке. Запись состоит из полей, разделенных пробелами или табуляцией. Каждая запись определяет правило проверки подлинности соединения. Запись указывает возможный тип соединения, диапазон IP-адресов клиента, имя базы данных, имя пользователя и метод аутентификации. Для аутентификации используется первая запись, соответствующая текущему соединению. Если аутентификация не удалась, последующие записи игнорируются. Если ни одна запись не соответствует текущему соединению, доступ запрещен.
Запись может иметь один из следующих форматов:
local database user auth-method [auth-options] host database user address auth-method [auth-options] hostssl database user address auth-method [auth-options] hostnossl database user address auth-method [auth-options] hostgssenc database user address auth-method [auth-options] hostnogssenc database user address auth-method [auth-options] host database user IP-address IP-mask auth-method [auth-options] hostssl database user IP-address IP-mask auth-method [auth-options] hostnossl database user IP-address IP-mask auth-method [auth-options] hostgssenc database user IP-address IP-mask auth-method [auth-options] hostnogssenc database user IP-address IP-mask auth-method [auth-options]
За подробным описанием полей записи обратитесь к статье The pg_hba.conf file.
Поле записи может содержать пробел, если оно заключено в двойные кавычки. Чтобы использовать ключевое слово в поле записи, заключите его в одинарные кавычки. Пустые строки и текст после символа комментария #
игнорируются. Чтобы продолжить запись на следующей строке, поставьте в конце строки обратную косую черту. Вы также можете использовать обратную косую черту в тексте, взятом в кавычки, или комментариях.
Для редактирования 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 & Reload, чтобы применить изменения. Следующие строки добавятся в pg_data1\adpg14\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, активируйте переключатель Show advanced для отображения поля postgresql.conf custom section и добавьте в это поле новое значение 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
.