Перейти с паролей md5 на scram-sha-256
PostgreSQLБезопасностьКоманда
-- 1) Store new passwords as SCRAM
ALTER SYSTEM SET password_encryption = 'scram-sha-256';
SELECT pg_reload_conf();
-- 2) Find roles still carrying md5 password hashes (requires superuser)
SELECT rolname,
CASE
WHEN rolpassword LIKE 'SCRAM-SHA-256$%' THEN 'scram-sha-256'
WHEN rolpassword LIKE 'md5%' THEN 'md5'
WHEN rolpassword IS NULL THEN 'no password'
ELSE 'other'
END AS password_type,
rolvaliduntil
FROM pg_authid
WHERE rolcanlogin
ORDER BY password_type, rolname;
-- 3) Reset the password of each md5 role (preferably in psql: \password legacy_app)
ALTER ROLE legacy_app PASSWORD 'New#Password2';
# 4) Once all roles use SCRAM, change md5 -> scram-sha-256 in pg_hba.conf and reloadЧто делает
Обеспечивает хранение новых паролей как SCRAM-SHA-256, находит login-роли, у которых ещё хранятся хэши md5, и описывает шаги перевода pg_hba.conf на scram-sha-256 после обновления паролей.
Когда использовать
Когда аудит безопасности отмечает md5, после обновления до PG14+ или при подготовке к версиям, где md5 объявлен устаревшим.
Внимание
SCRAM нельзя получить из существующих хэшей md5; каждый пароль нужно задать заново в открытом виде (требует координации с командами приложений). Метод 'md5' в pg_hba.conf автоматически выполняет аутентификацию SCRAM для ролей с паролем SCRAM, поэтому сохранение md5 на время миграции — безопасный промежуточный шаг, но как только метод становится 'scram-sha-256', роли с паролями md5 больше не смогут подключиться. Старые клиентские драйверы (libpq < 10, старые драйверы JDBC/.NET) могут не поддерживать SCRAM; сначала обновите драйверы. ALTER ROLE ... PASSWORD может записать пароль в журнал через log_statement; psql \password хэширует его на клиенте перед отправкой.
Связанные материалы
- Построить иерархию ролей с минимальными привилегиями (GRANT + ALTER DEFAULT PRIVILEGES)
- Настроить изоляцию арендаторов (tenant) через row-level security
- Проверить порядок правил pg_hba.conf и безопасно перечитать конфигурацию
- Включить SSL/TLS и проверить шифрование подключений (pg_stat_ssl)
- Вести журналы аудита на уровне ролей и объектов через pgaudit