2014-11-18 6 views
7

У меня есть рабочий стол Kubuntu 14.10 с установленной базой данных PostgreSQL 9.4. Я изменил пароль для postgres пользователя в базе данных, выполнив SQL:Может подключаться к postgres через localhost без пароля, но не через 127.0.0.1. Зачем?

ALTER USER postgres PASSWORD 'password'; 

И я могу подключиться к серверу БД по psql -h localhost -U postgres -W и дает этот пароль но я также подключить без требования пароля по просто psql -h localhost -U postgres.

С другой стороны, если я запустил psql -h 127.0.0.1 -U postgres, он запрашивает у меня пароль, заданный ранее.

В чем разница между хостами localhost и 127.0.0.1 и их методом входа в систему? Где он установлен? Я не вижу localhost-связанных записей в файле pg_hba.conf.

+0

У вас есть файл .pgpass? –

+0

Да. Когда я обдумал это, я ничего не нашел об этом файле. Это действительно отвечает на мой вопрос. Как я вижу, pgadmin3 создал этот файл, когда я вошел в подробности соединения там (и мне было любопытно, где пароль pgadmin хранит пароль ... хотя и не искал его). Если вы разместите это как правильный ответ, я приму его как правильно. – silmeth

+1

Другое отличие состоит в том, что 'localhost' разрешает' :: 1' на некоторых системах или на другой эквивалент IPv6 или на несколько адресов. Любое из них означает, что '127.0.0.1' не будет соответствовать в' pg_hba.conf'. –

ответ

9

Поведение, которое вы видите , может быть вызвано файлом пароля. Файл паролей обычно называется ~/.pgpass в Unix-системах, но через переменную окружения PGPASSFILE можно указать другое имя файла.

Я думаю, что файл паролей, содержащий строку для «localhost», но не содержит строку для «127.0.0.1», покажет поведение, которое вы видите. Мой собственный файл ~/.pgpass содержит эту строку.

 
localhost:*:*:postgres:password 

Вот что происходит, когда я пытаюсь подключиться так же, как вы.

 
$ 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: 

Добавление строки 127.0.0.1:*:*:postgres:password в ~/.pgpass позволяет мне войти, используя 127.0.0.1 и без пароля.

 
$ 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=# 
Смежные вопросы