2014-11-18 18 views
7

Ho installato il desktop Kubuntu 14.10 con database PostgreSQL 9.4. Ho cambiato la password dell'utente postgres nel database eseguendo SQL:Può connettersi a postgres tramite localhost senza password ma non tramite 127.0.0.1. Perché?

ALTER USER postgres PASSWORD 'password'; 

E posso connettersi al server DB psql -h localhost -U postgres -W e dando quella password ma posso anche collegare senza richiesta della password da semplicemente psql -h localhost -U postgres.

D'altra parte, se corro psql -h 127.0.0.1 -U postgres mi viene richiesta la password impostata in precedenza.

Qual è la differenza tra gli host localhost e 127.0.0.1 e il relativo metodo di accesso? Dove è ambientato? Non vedo voci correlate a localhost nel file pg_hba.conf.

+0

Hai un file .pgpass? –

+0

Sì. Quando ho cercato su Google, non ho trovato nulla su questo file. In realtà risponde alla mia domanda. Come ho visto, pgadmin3 ha creato questo file quando ho inserito i dettagli della connessione (e ero curioso di sapere dove la password dell'archivio pgadmin ... non la cercava, però). Se pubblichi questo come risposta corretta, lo accetto come corretto. – silmeth

+1

Un'altra differenza è che 'localhost' risolve a' :: 1' su alcuni sistemi, o su un altro equivalente a IPv6, oa diversi indirizzi. Ognuno di questi significa che '127.0.0.1' non corrisponde a' pg_hba.conf'. –

risposta

9

Il comportamento che si vede potrebbe essere causato da un file di password. Il file password è convenzionalmente chiamato ~/.pgpass su sistemi Unix, ma un nome file diverso può essere dato tramite la variabile ambientale PGPASSFILE.

Penso che un file di password che contiene una riga per "localhost", ma non contenga una riga per "127.0.0.1" mostrerà il comportamento che stai vedendo. Il mio file ~/.pgpass contiene questa linea.

 
localhost:*:*:postgres:password 

Ecco cosa succede quando provo a connettermi come hai fatto tu.

 
$ psql -h localhost -U postgres 
psql (9.3.5) 
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 
Type "help" for help. 

sandbox=# \q 
$ psql -h 127.0.0.1 -U postgres 
Password for user postgres: 

Aggiunta la linea 127.0.0.1:*:*:postgres:password a ~/.pgpass mi permette di accedere utilizzando 127.0.0.1 e nessuna password.

 
$ psql -h 127.0.0.1 -U postgres 
psql (9.3.5) 
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 
Type "help" for help. 

sandbox=# 
Problemi correlati