GNU/Linux >> Linux Esercitazione >  >> Linux

Postgres non consente localhost ma funziona con 127.0.0.1

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 un SIGHUP segnale. Se modifichi il file su un sistema attivo, dovrai segnalare il postmaster (usando pg_ctl reload ,chiamando la funzione SQL pg_reload_conf() o utilizzando kill -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

Linux
  1. Uno script può essere eseguibile ma non leggibile?

  2. Bashscript funziona da Terminal ma non da Crontab?

  3. Operazione non supportata con Setfacl?

  4. Scarica un'immagine Funziona in FireFox ma non in Internet Explorer

  5. Pycharm tensorflow ImportError ma funziona bene con Terminal

Che cos'è 127.0.0.1 Localhost?

Cos'è Localhost?

Haproxy non registra con rsyslog

Può eseguire il ping/ssh attraverso la LAN ma non con il Wi-Fi

L'IP del ping di Busybox funziona, ma il nome host nslookup non riesce con un indirizzo errato

Linee grep che iniziano con 1, ma non 10, 11, 100 ecc