Пароли MD5 и SCRAM-SHA-256 при миграции на версии PostgreSQL и переносе базы данных

«Пост-Грэс-Кью-Эл» свободная объектно-реляционная СУБД. Обмениваемся вопросами и ответами о её работе.
Ответить
AntonS
Сообщения: 131
Зарегистрирован: Пт июн 03, 2022 8:51 am

Пароли MD5 и SCRAM-SHA-256 при миграции на версии PostgreSQL и переносе базы данных

Сообщение AntonS »

В PostgreSQL существует несколько методов аутентификации по паролю, основные md5 и scram-sha-256, поскольку с ними пароли пользователей базы данных хранятся в виде криптографических хешей (алгоритм хеширования определяется параметром password_encryption) и значения самих паролей недоступны администраторам. Предпочтительным протоколом паролей является SCRAM (Salted Challenge Response Authentication Mechanism), как стандарт, принятый в Интернете, более безопасный, чем MD5 в PostgreSQL. Аутентификация SCRAM-SHA-256 производится по схеме вызов-ответ и предотвращает перехват паролей через недоверенные соединения. Поддержка SCRAM-SHA-256 для проверки и хранения паролей появилась с версии PostgreSQL 10 (авторы Микаэль Пакье, Хейкки Линнакангас).

Позднее, в версии PostgreSQL 14, значение password_encryption по умолчанию было изменено с md5 на scram-sha-256

При подготовке системы к миграции на новую основную версию PostgreSQL или при переносе базы данных на новый сервер, администратору необходимо учесть наличие паролей пользователей md5 по хранящимся в БД хешам паролей в таблице системного каталога pg_authid

Если в системе присутствуют пароли md5, то, как описано в документации, для облегчения их перевода на scram-sha-256, следует:
  • Задать password_encryption = 'scram-sha-256' в postgresql.conf
  • Указать метод аутентификации md5 в pg_hba.conf (для паролей scram произойдёт автоматический переход к использованию scram-sha-256, поэтому они тоже будут работать)
  • Добиться, чтобы все пользователи с паролями md5 сменили свои пароли
  • Затем поменять указание метода аутентификации в pg_hba.conf на scram-sha-256
Для переноса паролей пользователей на новый экземпляр (сервер) PostgreSQL необходимо получить хеши паролей из системного каталога pg_authid на старом экземпляре и применить их на новом.
Также администратор может автоматизировать получение команд создания пользователей с паролями на исходном сервере, воспользовавшись утилитой pg_dumpall с параметром -g (--globals-only)

Пример:

Код: Выделить всё

pg_dumpall -g >db.out
Ответить