Come appare il messaggio
psql: error: connection to server at "127.0.0.1", port 5432 failed: FATAL: password authentication failed for user "appuser"
2026-10-12 09:14:03 CEST [4121] FATAL: password authentication failed for user "appuser"
2026-10-12 09:14:03 CEST [4121] DETAIL: Connection matched pg_hba.conf line 113: "host all all 127.0.0.1/32 scram-sha-256"Cause frequenti
- La password è sbagliata, ad esempio una vecchia nella configurazione dell'app, in una variabile d'ambiente o in
~/.pgpass. - Il ruolo non ha una password, oppure è stata impostata in modo diverso da quello che la riga si aspetta.
- Un'altra riga di
pg_hba.confvale per prima. Vince la prima corrispondenza, quindi può valere un altro utente, database, indirizzo o metodo. - Caratteri speciali nella password rompono un URL di connessione, come
@,:,/o%, e vanno codificati in percentuale. - Il nome utente ha una grafia o maiuscole diverse dal ruolo nel database.
Verifica
- Quali ruoli esistono e possono accedere?
sudo -u postgres psql -c '\du' - Quale riga ha incontrato l'accesso fallito? Leggi il DETAIL nel log
sudo tail -n 30 /var/log/postgresql/postgresql-*-main.log - Regole attive in ordine
sudo -u postgres psql -c 'SELECT line_number, type, database, user_name, address, auth_method FROM pg_hba_file_rules' - Cifratura delle password in uso
sudo -u postgres psql -c 'SHOW password_encryption'
Soluzione
- Imposta una nuova password in modo interattivo, così non finisce nella history della shell:
sudo -u postgres psql, poi\password appuser. - Usa la stessa password nella configurazione dell'app. Codifica in percentuale i caratteri speciali in un URL oppure passa a parametri separati per host, utente e password.
- Correggi ordine e contenuto delle righe di
pg_hba.confe ricarica:sudo systemctl reload postgresql. Non usare maitrustper indirizzi di rete come soluzione rapida. - Se una vecchia libreria client supporta solo md5, aggiorna la libreria invece di abbassare la sicurezza del server. Dopo aver cambiato
password_encryption, reimposta le password. - Rimuovi una voce obsoleta in
~/.pgpasso una variabilePGPASSWORDche sovrascrive la password che pensi di usare.
Domande frequenti
Perché psql funziona sul server ma non dall'app?
In locale il socket usa spesso un'altra regola (peer) rispetto alla rete (scram-sha-256). Prova con psql -h 127.0.0.1 per usare lo stesso percorso dell'app.
In cosa è diverso da “no pg_hba.conf entry”?
Qui una riga corrispondeva e la password è fallita. Con “no pg_hba.conf entry” nessuna riga corrispondeva, il server rifiuta prima di chiedere una password.