Хеширование паролей
Роль, которая может входить в базу данных с использованием аутентификации по паролю, должна иметь пароль.
Пароль задается с помощью атрибута PASSWORD
при создании новой или изменении существующей роли.
Чтобы обеспечить защиту паролей, Greengage DB сохраняет их MD5-хеши вместо того, чтобы хранить пароли в виде обычного текста.
При необходимости вы можете изменить алгоритм хеширования паролей для улучшения безопасности.
Обзор
Когда вы создаете нового пользователя с паролем или изменяете пароль существующего пользователя, Greengage DB сохраняет хеш пароля в системном каталоге pg_authid
.
Хешированием паролей управляют следующие параметры конфигурации:
-
password_encryption
— задает, включено ли хеширование паролей. Не рекомендуется отключать этот параметр, поскольку в этом случае пароли хранятся в виде обычного текста. -
password_hash_algorithm
— задает алгоритм, используемый для хеширования паролей.
Поддерживаемые алгоритмы хеширования перечислены в таблице ниже. Обратите внимание, что для определенных алгоритмов хеширования необходимо использовать определенные методы аутентификации. Узнайте больше в разделе Методы аутентификации и хеширование паролей.
Алгоритм хеширования | Описание | Поддерживаемые методы аутентификации |
---|---|---|
MD5 (по умолчанию) |
Пароли хешируются с помощью алгоритма MD5 |
|
SCRAM-SHA-256 |
Пароли хешируются с помощью алгоритма SCRAM-SHA-256 |
|
SHA-256 |
Пароли хешируются с помощью алгоритма SHA-256 |
|
Изменение используемого алгоритма хеширования может повлиять на аутентификацию существующих пользователей. Чтобы обеспечить успешный вход этих пользователей в базу данных, необходимо:
-
Обновить метод аутентификации, заданный в файле pg_hba.conf для этих пользователей.
-
Сбросить пароли пользователей с помощью команды
ALTER ROLE
.
Управление хешированием паролей на глобальном уровне
Проверка текущего алгоритма хеширования
Чтобы определить, включено ли хеширование паролей, используйте параметр конфигурации password_encryption
:
$ gpconfig -s password_encryption
Результат должен выглядеть так:
Values on all segments are consistent GUC : password_encryption Master value: on Segment value: on
Чтобы узнать применяемый алгоритм хеширования, используйте параметр password_hash_algorithm
:
$ gpconfig -s password_hash_algorithm
Результат должен выглядеть следующим образом:
Values on all segments are consistent GUC : password_hash_algorithm Master value: MD5 Segment value: MD5
Изменение алгоритма хеширования
Чтобы изменить алгоритм хеширования паролей на глобальном уровне, используйте параметр конфигурации password_hash_algorithm
:
$ gpconfig -c password_hash_algorithm -v 'SCRAM-SHA-256'
Чтобы применить изменения, перезагрузите конфигурацию с помощью gpstop
:
$ gpstop -u
Затем вы можете проверить, что используется заданный алгоритм:
$ gpconfig -s password_hash_algorithm
Результат должен выглядеть следующим образом:
Values on all segments are consistent GUC : password_hash_algorithm Master value: SCRAM-SHA-256 Segment value: SCRAM-SHA-256
Управление хешированием паролей на уровне сессии
Проверка текущего алгоритма хеширования
Чтобы определить, включено ли хеширование паролей, используйте параметр конфигурации password_encryption
:
SHOW password_encryption;
Результат должен выглядеть так:
password_encryption --------------------- on
Чтобы узнать текущий алгоритм хеширования, используйте параметр password_hash_algorithm
:
SHOW password_hash_algorithm;
Результат должен выглядеть следующим образом:
password_hash_algorithm ------------------------- MD5
Изменение алгоритма хеширования
Чтобы изменить алгоритм хеширования паролей на уровне сессии, используйте параметр конфигурации password_hash_algorithm
:
SET password_hash_algorithm = 'SCRAM-SHA-256';
Затем вы можете проверить, что для данной сессии используется заданный алгоритм:
SHOW password_hash_algorithm;
Результат должен выглядеть следующим образом:
password_hash_algorithm ------------------------- SCRAM-SHA-256
Пример: Изменение алгоритма хеширования в сессии
Данный пример демонстрирует, как изменить алгоритм хеширования пароля в сессии с MD5
на SCRAM-SHA-256
.
-
Создайте двух пользователей с паролями:
CREATE ROLE alice WITH LOGIN PASSWORD '123456'; CREATE ROLE bob WITH LOGIN PASSWORD 'foobar';
-
Чтобы увидеть, как пароли хранятся в базе данных, получите данные из системного каталога
pg_authid
:SELECT rolname, rolpassword FROM pg_authid;
Префикс
md5
в значениях столбцаrolpassword
указывает, что используется алгоритм хешированияMD5
:rolname | rolpassword ---------+------------------------------------- gpadmin | alice | md506b4475e55db6d5d87d3f690c591b5d9 bob | md5e104270d96d95e992cd5a0889fea9a62
-
Измените алгоритм хеширования на
SCRAM-SHA-256
:SET password_hash_algorithm = 'SCRAM-SHA-256';
-
Сбросьте пароль пользователя
alice
:ALTER ROLE alice WITH PASSWORD '123456';
-
Перепроверьте данные в системном каталоге
pg_authid
:SELECT rolname, rolpassword FROM pg_authid;
Обратите внимание, что значение
rolpassword
дляalice
теперь начинается сSCRAM-SHA-256
:rolname | rolpassword ---------+--------------------------------------------------------------------------------------------------------------------------------------- gpadmin | bob | md5e104270d96d95e992cd5a0889fea9a62 alice | SCRAM-SHA-256$4096:KqJxVxjdp12Ndd1igeD+ig==$8akIprzpNUTIqxN9di0pz7ao7Jp14RiIEwjzkucBzqA=:HWrnwvb1/1ktYq5adswEY9dzMqTGHMMnzAg7VV6ii3U=
-
Чтобы убедиться, что пользователь
alice
может успешно подключиться к базе данных, обновите файл pg_hba.conf одним из следующих способов:-
Метод аутентификации
md5
позволяет использовать оба алгоритма хеширования —MD5
иSCRAM-SHA-256
:# connection-type database user address auth-method host postgres alice .example.com md5
-
Метод аутентификации
scram-sha-256
может использоваться только с алгоритмом хешированияSCRAM-SHA-256
:# connection-type database user address auth-method host postgres alice .example.com scram-sha-256
-