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

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 содержит набор записей, по одной на каждой строке. Запись состоит из полей, разделенных пробелами или табуляцией. Каждая запись определяет правило проверки подлинности соединения. Запись указывает возможный тип соединения, диапазон 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.

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