Migrar de contraseñas md5 a scram-sha-256
PostgreSQLSeguridadComando
-- 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 reloadQué hace
Hace que las contraseñas nuevas se guarden como SCRAM-SHA-256, encuentra los roles de login que aún tienen hashes md5 y da los pasos para pasar pg_hba.conf a scram-sha-256 una vez renovadas las contraseñas.
Cuándo usarlo
Cuando una auditoría de seguridad señala md5, tras un upgrade a PG14+, o al prepararse para versiones en las que md5 está obsoleto.
Precaución
SCRAM no se puede derivar de los hashes md5 existentes; cada contraseña debe definirse de nuevo en texto claro (requiere coordinación con los equipos de aplicación). El método 'md5' de pg_hba.conf realiza automáticamente la autenticación SCRAM para los roles cuya contraseña es SCRAM, por lo que mantener md5 durante la migración es un paso intermedio seguro, pero una vez que el método es 'scram-sha-256' los roles con contraseñas md5 ya no pueden conectarse. Los drivers de cliente antiguos (libpq < 10, drivers JDBC/.NET antiguos) pueden no soportar SCRAM; actualice primero los drivers. ALTER ROLE ... PASSWORD puede escribir la contraseña en el log mediante log_statement; \password de psql la convierte en hash en el cliente antes de enviarla.
Relacionado
- Construir una jerarquía de roles de mínimo privilegio (GRANT + ALTER DEFAULT PRIVILEGES)
- Configurar el aislamiento de inquilinos con row-level security
- Validar el orden de las reglas de pg_hba.conf y recargar con seguridad
- Habilitar SSL/TLS y verificar las conexiones cifradas (pg_stat_ssl)
- Mantener logs de auditoría a nivel de rol y de objeto con pgaudit