Migrar de senhas md5 para scram-sha-256
PostgreSQLSegurançaComando
-- 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 reloadO que faz
Faz com que novas senhas sejam armazenadas como SCRAM-SHA-256, encontra as roles de login que ainda têm hashes md5 e dá os passos para mudar o pg_hba.conf para scram-sha-256 depois que as senhas forem renovadas.
Quando usar
Quando uma auditoria de segurança aponta o md5, após o upgrade para PG14+ ou ao se preparar para versões em que o md5 está obsoleto.
Atenção
O SCRAM não pode ser derivado dos hashes md5 existentes; toda senha precisa ser definida novamente em texto claro (exige coordenação com as equipes de aplicação). O método 'md5' no pg_hba.conf faz automaticamente autenticação SCRAM para roles cuja senha é SCRAM, então manter md5 durante a migração é um passo intermediário seguro, mas quando o método for 'scram-sha-256' as roles com senhas md5 não conseguem mais conectar. Drivers de cliente antigos (libpq < 10, drivers JDBC/.NET antigos) podem não suportar SCRAM; atualize os drivers primeiro. ALTER ROLE ... PASSWORD pode gravar a senha no log via log_statement; o psql \password faz o hash no cliente antes de enviar.
Relacionados
- Montar uma hierarquia de roles com privilégio mínimo (GRANT + ALTER DEFAULT PRIVILEGES)
- Configurar isolamento de tenants com row-level security
- Validar a ordem das regras do pg_hba.conf e recarregar com segurança
- Habilitar SSL/TLS e verificar conexões criptografadas (pg_stat_ssl)
- Manter logs de auditoria em nível de role e de objeto com pgaudit