DBAtlas · Atlas d'exploitation des bases de données

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 reload

Ce 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.

Ouvrir dans DBAtlas →

Voir aussi