Аутентификация по паролю
Этот раздел описывает методы аутентификации по паролю. Данные методы используются для проверки пароля пользователя при подключении к базе данных.
Чтобы использовать аутентификацию по паролю, у пользователя должен быть установлен пароль. В противном случае аутентификация по паролю для этого пользователя завершится ошибкой.
Чтобы обеспечить защиту паролей, 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 |
|
|
Пароли хешируются с помощью алгоритма SCRAM-SHA-256 |
|
Изменение используемого алгоритма хеширования может повлиять на аутентификацию существующих пользователей. Чтобы обеспечить успешный вход этих пользователей в базу данных, необходимо:
-
Обновить метод аутентификации, заданный в файле pg_hba.conf для этих пользователей.
-
Сбросить пароли пользователей с помощью команды
ALTER ROLE.
Обратите внимание, что для определенных алгоритмов хеширования необходимо использовать определенные методы аутентификации. Узнайте больше в разделе Методы аутентификации и хеширование паролей.
Методы аутентификации и хеширование паролей
Доступность различных методов аутентификации по паролю зависит от того, как пользовательский пароль хешируется на сервере. Эта таблица показывает, как Greengage DB выбирает метод аутентификации в зависимости от используемого алгоритма хеширования паролей.
| Метод аутентификации | Алгоритмы хеширования паролей |
|---|---|
password |
Метод аутентификации
Во всех случаях пароль передается как обычный текст |
md5 |
Метод аутентификации
|
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.