Von md5-Passwörtern auf scram-sha-256 migrieren
PostgreSQLSicherheitBefehl
-- 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 reloadWas 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.
Verwandte Einträge
- Rollenhierarchie nach Least Privilege aufbauen (GRANT + ALTER DEFAULT PRIVILEGES)
- Mandantentrennung mit Row-Level Security einrichten
- Regelreihenfolge in pg_hba.conf prüfen und sicher neu laden
- SSL/TLS aktivieren und verschlüsselte Verbindungen prüfen (pg_stat_ssl)
- Audit-Logs auf Rollen- und Objektebene mit pgaudit führen