psql не иска да влезе, докато pgAdmin ме регистрира успешно? Грешна команда?

Имам отдалечена машина и се опитвам да вляза в база данни на 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 връзки първо се опитва peer автентификация и ако не успее, не се опитва md5 и просто връща грешка?


person Boris Burkov    schedule 21.09.2015    source източник
comment
PgAdmin ще използва tcp/ip към localhost (127.0.0.1), psql ще използва unix сокети. Проверете pg_hba.conf и главата за удостоверяване на клиента в ръководството.   -  person Craig Ringer    schedule 21.09.2015
comment
Можете да принудите psql да използва inet сокет, като посочите име на хост: psql -U postgres -h 127.0.0.1 mydb   -  person joop    schedule 22.09.2015


Отговори (1)


psql по подразбиране се опитва да влезе чрез peer. Това означава, че трябва да сте влезли като postgres на вашата локална машина. Можете да принудите psql да използва TCP/IP, трябва tpo да посочите хост, който може да бъде localhost, така че повикването може да изглежда така:

psql -U postgres -h 127.0.0.1

Друг начин би бил да коригирате настройките си. Виждам два начина да промените текущите си локални настройки:

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

1) Разрешете на всички потребители да влизат без парола от localhost, като зададете ред

local   all             all                                     trust

Това е много опасно и не трябва да се прави IMHO.

2) Друг начин може да бъде да създадете потребител на база данни със същото потребителско име като вашето системно влизане и да предоставите всички права на този акаунт

И разбира се, което обикновено правя в такива случаи: Стартирайте psql в контекста на потребител на postgres, напр. чрез sudo -u postgres psql или със su -u postgres -c "psql ..."

person frlan    schedule 22.09.2015