У меня есть удаленная машина, и я пытаюсь войти в базу данных postgres с помощью следующей команды (запуск от имени пользователя Linux root
через ssh
, т.е. локально на этой машине):
# psql -d mydatabase -U postgres -W
Password for user postgres: <here goes my password>
psql: FATAL: Peer authentication failed for user "postgres"
По какой-то причине это не удается (пробовал ~ 5 раз).
Но когда я вхожу в ту же базу данных с помощью pgAdmin (т.е. удаленно) с той же ролью (postgres) и одним и тем же паролем, он каждый раз успешно входит в систему.
Что не так с командой psql
, которую я использую? Если это правильно, можете ли вы предложить какие-либо шаги по устранению неполадок?
РЕДАКТИРОВАТЬ: Итак, проблема в том, что в pg_hba.conf
удаленные и локальные соединения обрабатываются по-разному. Удаленные настроены правильно. Вопрос в том, почему местные не работают.
Для местных у меня в pg_hba.conf
:
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Правильно ли я понимаю, что для localhost
соединений он сначала пытается аутентифицировать одноранговый узел, а если это не удается, он не пытается md5
и просто возвращает ошибку?
psql
будет использовать сокеты unix. См.pg_hba.conf
и главу руководства по аутентификации клиентов. - person Craig Ringer   schedule 21.09.2015psql -U postgres -h 127.0.0.1 mydb
- person joop   schedule 22.09.2015