DBAtlas · Atlas für Datenbankbetrieb

Von md5-Passwörtern auf scram-sha-256 migrieren

PostgreSQLSicherheit

Befehl

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

Was es tut

Sorgt dafür, dass neue Passwörter als SCRAM-SHA-256 gespeichert werden, findet Login-Rollen, die noch md5-Hashes tragen, und nennt die Schritte, pg_hba.conf nach der Erneuerung der Passwörter auf scram-sha-256 umzustellen.

Wann einsetzen

Wenn ein Sicherheitsaudit md5 beanstandet, nach einem Upgrade auf PG14+ oder bei der Vorbereitung auf Versionen, in denen md5 veraltet ist.

Vorsicht

SCRAM lässt sich nicht aus vorhandenen md5-Hashes ableiten; jedes Passwort muss im Klartext neu gesetzt werden (erfordert Abstimmung mit den Anwendungsteams). Die Methode 'md5' in pg_hba.conf führt für Rollen mit SCRAM-Passwort automatisch SCRAM-Authentifizierung durch, md5 während der Migration beizubehalten ist also ein sicherer Zwischenschritt; sobald die Methode aber 'scram-sha-256' ist, können sich Rollen mit md5-Passwörtern nicht mehr verbinden. Alte Client-Treiber (libpq < 10, alte JDBC-/.NET-Treiber) unterstützen SCRAM eventuell nicht; Treiber zuerst aktualisieren. ALTER ROLE ... PASSWORD kann das Passwort über log_statement ins Log schreiben; psql \password hasht es vor dem Senden auf dem Client.

In DBAtlas öffnen →

Verwandte Einträge