Migrer des mots de passe md5 vers scram-sha-256
PostgreSQLSécuritéCommande
-- 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 reloadCe que fait la commande
Fait stocker les nouveaux mots de passe en SCRAM-SHA-256, trouve les rôles de connexion qui portent encore des hachages md5, et donne les étapes pour passer pg_hba.conf à scram-sha-256 une fois les mots de passe renouvelés.
Quand l'utiliser
Lorsqu'un audit de sécurité signale md5, après une mise à niveau vers PG14+, ou en préparation des versions où md5 est déprécié.
Attention
SCRAM ne peut pas être dérivé des hachages md5 existants ; chaque mot de passe doit être redéfini en clair (nécessite une coordination avec les équipes applicatives). La méthode 'md5' de pg_hba.conf effectue automatiquement une authentification SCRAM pour les rôles dont le mot de passe est en SCRAM, donc garder md5 pendant la migration est une étape intermédiaire sûre, mais une fois la méthode passée à 'scram-sha-256', les rôles aux mots de passe md5 ne peuvent plus se connecter. Les anciens pilotes clients (libpq < 10, anciens pilotes JDBC/.NET) peuvent ne pas prendre en charge SCRAM ; mettez d'abord les pilotes à jour. ALTER ROLE ... PASSWORD peut écrire le mot de passe dans le journal via log_statement ; psql \password le hache côté client avant l'envoi.
Voir aussi
- Construire une hiérarchie de rôles à moindre privilège (GRANT + ALTER DEFAULT PRIVILEGES)
- Mettre en place l'isolation des tenants avec la row-level security
- Valider l'ordre des règles de pg_hba.conf et recharger sans risque
- Activer SSL/TLS et vérifier les connexions chiffrées (pg_stat_ssl)
- Conserver des journaux d'audit par rôle et par objet avec pgaudit