Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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

Андрей Аксенов

Этот раздел описывает методы аутентификации по паролю. Данные методы используются для проверки пароля пользователя при подключении к базе данных.

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

Чтобы обеспечить защиту паролей, Greengage DB сохраняет их хеши вместо того, чтобы хранить пароли как обычный текст. При необходимости вы можете изменить алгоритм хеширования паролей для улучшения безопасности.

Методы аутентификации по паролю

Доступные методы аутентификации по паролю описаны ниже.

password

Метод аутентификации password использует незашифрованный пароль для аутентификации пользователя. Этот метод уязвим для атак с перехватом пароля. Учитывая, что пароль передается как обычный текст, рекомендуется использовать клиентские подключения, защищенные SSL-шифрованием.

md5

Метод аутентификации md5 использует MD5 или SCRAM-SHA-256-аутентификацию для проверки пароля пользователя. Этот метод позволяет использовать менее безопасный резервный механизм проверки подлинности "вызов-ответ" для тех пользователей, у которых пароль захеширован с использованием MD5. Резервный механизм также предотвращает перехват пароля, но не обеспечивает защиту в случае хищения хешей паролей с сервера.

Метод аутентификации md5 не поддерживает db_user_namespace.

scram-sha-256

Метод аутентификации scram-sha-256 использует SCRAM-SHA-256-аутентификацию в соответствии с RFC 7677 для проверки пароля пользователя. Аутентификация производится по схеме "вызов-ответ", которая предотвращает перехват паролей при ненадежных соединениях. SCRAM-SHA-256 надежнее MD5, но устаревшие клиентские библиотеки могут ее не поддерживать.

Хеширование паролей

Когда вы создаете нового пользователя с паролем или изменяете пароль существующего пользователя, Greengage DB сохраняет хеш пароля в системном каталоге pg_authid. Параметр конфигурации password_encryption задает алгоритм, используемый для хеширования паролей. Поддерживаемые алгоритмы хеширования перечислены в таблице ниже.

Алгоритм хеширования Описание Поддерживаемые методы аутентификации

md5 (по умолчанию)

Пароли хешируются с помощью алгоритма MD5

md5, password

scram-sha-256

Пароли хешируются с помощью алгоритма SCRAM-SHA-256

scram-sha-256, md5, password

Изменение используемого алгоритма хеширования может повлиять на аутентификацию существующих пользователей. Чтобы обеспечить успешный вход этих пользователей в базу данных, необходимо:

  • Обновить метод аутентификации, заданный в файле pg_hba.conf для этих пользователей.

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

Обратите внимание, что для определенных алгоритмов хеширования необходимо использовать определенные методы аутентификации. Узнайте больше в разделе Методы аутентификации и хеширование паролей.

Методы аутентификации и хеширование паролей

Доступность различных методов аутентификации по паролю зависит от того, как пользовательский пароль хешируется на сервере. Эта таблица показывает, как Greengage DB выбирает метод аутентификации в зависимости от используемого алгоритма хеширования паролей.

Метод аутентификации Алгоритмы хеширования паролей

password

Метод аутентификации password может использоваться с любым алгоритмом хеширования, поддерживаемым Greengage DB:

  • md5

  • scram-sha-256

Во всех случаях пароль передается как обычный текст

md5

Метод аутентификации md5 может использоваться со следующими алгоритмами хеширования:

  • md5 — в этом случае для проверки пароля пользователя используется MD5-аутентификация.

  • scram-sha-256 — в этом случае для проверки пароля пользователя используется SCRAM-SHA-256-аутентификация.

scram-sha-256

Метод аутентификации scram-sha-256 может использоваться только с алгоритмом хеширования scram-sha-256. В данном случае для проверки пароля пользователя используется SCRAM-SHA-256-аутентификация

Пример 1: Включение MD5-аутентификации

Для выполнения команд, описанных в следующих разделах, подключитесь к хосту координатора Greengage DB как gpadmin и создайте новую базу данных:

$ createdb sales

Проверка алгоритма хеширования пароля

Чтобы узнать используемый алгоритм хеширования, используйте параметр password_encryption:

$ gpconfig -s password_encryption

Результат должен выглядеть следующим образом:

Values on all segments are consistent
GUC              : password_encryption
Coordinator value: md5
Segment     value: md5

Создание ролей

Создайте групповую роль:

$ createuser sales_team --no-login

Создайте пользователя alice и назначьте ему роль sales_team:

$ createuser alice --role=sales_team --pwprompt

При появлении запроса введите пароль для пользователя:

Enter password for new role:
Enter it again:

Аналогичным образом создайте пользователя bob:

$ createuser bob --role=sales_team --pwprompt

Проверка таблицы pg_authid

Чтобы посмотреть, как пароли хранятся в базе данных, выполните запрос к таблице pg_authid:

$ psql -c 'SELECT rolname, rolpassword FROM pg_authid;'

Префикс md5 в значениях столбца rolpassword указывает, что используется алгоритм хеширования md5:

          rolname          |             rolpassword
---------------------------+-------------------------------------
 ...                       | ...
 sales_team                |
 alice                     | md506b4475e55db6d5d87d3f690c591b5d9
 bob                       | md5e104270d96d95e992cd5a0889fea9a62

Редактирование pg_hba.conf

Файл pg_hba.conf определяет, какие методы аутентификации используются для клиентских подключений в зависимости от типа подключения, базы данных, пользователя и адреса клиента. В этой процедуре добавляется правило, которое включает MD5-аутентификацию для групповой роли sales_team.

Откройте pg_hba.conf для редактирования:

$ vi $COORDINATOR_DATA_DIRECTORY/pg_hba.conf

Добавьте в файл следующую строку:

# connection-type  database  user         address          auth-method
host               sales     +sales_team  192.168.10.0/24  md5

auth-method устанавливается в md5 и включает аутентификацию по паролю для пользователей из sales_team.

Сохраните и закройте файл. Перезагрузите конфигурацию с помощью gpstop, чтобы применить изменения:

$ gpstop -u

Подключение к базе данных

В этом разделе описано подключение к базе данных, защищенной аутентификацией MD5, с помощью psql. Действия выполняются на клиентском хосте с IP-адресом из подсети 192.168.10.0/24.

Подключитесь к базе данных sales под ролью alice, используя psql:

$ psql sales -U alice -h 192.168.1.10

Введите пароль пользователя alice и нажмите Enter:

Password for user alice:

Результат может выглядеть так:

psql (18.3, server 12.22)
Type "help" for help.

sales=>

Пример 2: Включение аутентификации SCRAM-SHA-256 для конкретного пользователя

Сброс пароля пользователя

Чтобы использовать аутентификацию SCRAM-SHA-256, сбросьте пароль пользователя так, чтобы он хранился с использованием алгоритма хеширования SCRAM-SHA-256. Откройте psql на координаторе:

$ psql

Установите параметр конфигурации password_encryption на уровне сессии:

SET password_encryption = 'scram-sha-256';

Сбросьте пароль:

ALTER ROLE alice PASSWORD '123456';

Проверка таблицы pg_authid

Чтобы увидеть, как пароль alice хранится в базе данных, выберите данные из таблицы pg_authid:

SELECT rolname, rolpassword FROM pg_authid;

Обратите внимание, что значение rolpassword для alice теперь начинается с SCRAM-SHA-256:

          rolname          |             rolpassword
---------------------------+-------------------------------------
 ...                       | ...
 sales_team                |
 bob                       | md5e104270d96d95e992cd5a0889fea9a62
 alice                     | SCRAM-SHA-256$4096:H0lMkdtcV+ofsUm5n8EzEA==$jLvJU+tnQeJ7xeja3lNK4UGpFaoz9rY03XDCUJtWsyM=:aNaaeam1yQGW29o9UwayPROiAC2evsUwHszzGeZ1kz8=

Подключение к базе данных

Подключитесь к базе данных sales под ролью alice, используя psql:

$ psql sales -U alice -h 192.168.1.10

Введите пароль пользователя alice и нажмите Enter. В этом случае используется аутентификация SCRAM-SHA-256, поскольку метод аутентификации md5 в файле pg_hba.conf поддерживает и MD5, и SCRAM-SHA-256.

Пример 3: Включение аутентификации SCRAM-SHA-256 на глобальном уровне

Изменение алгоритма хеширования пароля

Установите параметр password_encryption в значение scram-sha-256:

$ gpconfig -c password_encryption -v 'scram-sha-256'

Перезагрузите конфигурацию, чтобы применить изменения:

$ gpstop -u

После этого изменения пароли всех пользователей сохраняются с использованием алгоритма хеширования SCRAM-SHA-256 при задании новых паролей — как при создании пользователей, так и при обновлении существующих паролей.

Редактирование pg_hba.conf

Откройте pg_hba.conf для редактирования:

$ vi $COORDINATOR_DATA_DIRECTORY/pg_hba.conf

Обновите запись для роли sales_team:

# connection-type  database  user         address          auth-method
host               sales     +sales_team  192.168.10.0/24  scram-sha-256

Эта запись требует аутентификации SCRAM-SHA-256 для всех пользователей с ролью sales_team.

Сохраните и закройте файл. Перезагрузите конфигурацию с помощью gpstop, чтобы применить изменения:

$ gpstop -u

Подключение к базе данных

Попробуйте подключиться к базе данных sales под пользователем bob:

$ psql sales -U bob -h 192.168.1.10

Введите пароль для bob и нажмите Enter. Подключение завершается ошибкой, подобной следующей:

psql: error: connection to server at "192.168.1.10", port 5432 failed: FATAL:  password authentication failed for user "bob"

В логах появится соответствующее сообщение:

FATAL: |28P01|"password authentication failed for user ""bob"""|"User ""bob"" does not have a valid SCRAM verifier.

Пароль пользователя bob по-прежнему хранится с использованием алгоритма хеширования MD5, поэтому аутентификация завершается ошибкой. Чтобы устранить проблему, сбросьте пароль пользователя, чтобы он хранился в формате SCRAM.

Сброс пароля пользователя

Откройте psql на хосте координатора:

$ psql

Сбросьте пароль для bob:

ALTER ROLE bob PASSWORD 'foobar';

После сброса пароля пользователь bob может успешно подключиться к базе данных sales.