Il problema
Postgres utilizzerà potenzialmente IPv6 quando si specifica -h localhost
che ha dato il precedente pg_hba.conf
specifica ident
, verrà restituita una richiesta di password.
Tuttavia, quando -h 127.0.0.1
viene specificato, obbliga Postgres a utilizzare IPv4 , che è impostato su trust
nella configurazione precedente e consente l'accesso senza password.
La risposta
Quindi la risposta è modificare la riga dell'host IPv6 in pg_hba.conf
per usare trust
:
# IPv6 local connections:
host all all ::1/128 trust
Ricordare di riavviare il servizio Postgres dopo aver apportato modifiche alla configurazione.
In pg_hba.conf, la prima corrispondenza conta. Il manuale:
Il primo record con tipo di connessione, indirizzo client, database richiesto e nome utente corrispondenti viene utilizzato per eseguire l'autenticazione. Non esiste "fall-through" o "backup":se viene scelto un record e l'autenticazione fallisce, i record successivi non vengono considerato. Se nessun record corrisponde, l'accesso è negato.
Nota l'ordine invertito :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
Ma:
host all all localhost ident
host all all localhost trust
Ricordati di ricaricare dopo aver salvato le modifiche a pg_hba.conf
. (Il riavvio non è necessario.) Il manuale:
L'
pg_hba.conf
viene letto all'avvio e quando il processo del server principale riceve unSIGHUP
segnale. Se modifichi il file su un sistema attivo, dovrai segnalare il postmaster (usandopg_ctl reload
,chiamando la funzione SQLpg_reload_conf()
o utilizzandokill -HUP
) per fargli rileggere il file.
Se davvero "aggiungi" le righe come hai scritto, non dovrebbe esserci alcun effetto. Ma se sostituisci le linee, c'è.
Nel primo caso, ottieni trust
metodo di autenticazione, che è una politica della porta aperta. Il manuale:
PostgreSQL presuppone che chiunque possa connettersi al server sia autorizzato ad accedere al database con qualsiasi nome utente del database specificato (anche nomi di superutente)
Ma nel secondo caso ottieni ident
metodo di autenticazione, che deve essere impostato correttamente per funzionare.
Inoltre, come Cas ha sottolineato in seguito, localhost
copre sia IPv4 che IPv6, mentre 127.0.0.1/32
si applica solo a IPv4.
Se stai effettivamente utilizzando la versione obsoleta 8.4, vai al vecchio manuale per 8.4. Sei a conoscenza del fatto che 8.4 ha raggiunto l'EOL nel 2014 e non è più supportato? Prendi in considerazione l'aggiornamento a una versione corrente.
In Postgres 9.1 o successivo è preferibile utilizzare peer
di ident
.
Altro:
- Esegui il file batch con il comando psql senza password