Ошибка аутентификации паролей Postgres
Я попытался войти с пользователем postgres с моей машины Windows на свой сервер с помощью Pgadmin.
Но он продолжает давать мне эту ошибку:
psql: FATAL: password authentication failed for user "postgres"
Итак, я попытался войти в систему из командной строки с psql, что дало мне ту же ошибку. Затем я установил пароль для "теста" с помощью psql, после того, как он положил локальную запись в pg_hba.conf. Затем я вернул запись в md5 и попытался войти в систему с паролем "test".
В psql я использовал следующие команды:
ALTER ROLE postgres WITH PASSWORD 'test';
ALTER ROLE postgres PASSWORD 'test';
ALTER USER postgres WITH PASSWORD 'test';
ALTER USER postgres PASSWORD 'test';
И эта специальная команда psql
\password
Каждый раз я возвращал локальную запись pg_hba.conf в md5 и пытался войти в систему с помощью psql:
psql -U postgres
И затем меня попросят ввести пароль. После ввода "test" psql дает мне ту же ошибку, что и я упоминал ранее.
И, конечно же, я перезапустил postgresql после каждого изменения файла pg_hba. И я использую psql с "su postgres".
Итак, хотя я могу изменить пароль обычным способом, он не принимается как пароль.
Я надеюсь, что кто-то сможет мне помочь.
Некоторая информация:
Postgresql 9.1
Ubuntu 12.04
Файл Pg_hba (по запросу)
local all postgres md5
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
host all all <my-ip-address>/32 md5
Когда я хотел изменить пароль, я изменил верхний md5 на доверие.
Я хочу упомянуть, что эта конфигурация работала без проблем раньше.
Результаты
sudo -u postgres psql -x -c "select * from pg_user where usename='postgres'"
А:
usename | postgres
usesysid | 10
usecreatedb | t
usesuper | t
usecatupd | t
userepl | t
passwd | ********
valuntil | 1970-01-01 00:00:00+01
useconfig |
Ответы
Ответ 1
Как показано в последнем правлении, пароль действителен до 1970 года, что означает, что он в настоящее время недействителен.
Это объясняет сообщение об ошибке, которое совпадает с неверным паролем.
Reset действительность с:
ALTER USER postgres VALID UNTIL 'infinity';
В недавнем вопросе у другого пользователя была такая же проблема с учетными записями пользователей и PG-9.2:
PostgreSQL - аутентификация паролей после добавления ролей групп
По-видимому, существует способ непреднамеренно установить срок действия фальшивого пароля для эпохи Unix (1 января 1970 года, минимально возможное значение для типа abstime
). Возможно, есть ошибка в самом PG или в каком-то клиентском инструменте, который создаст эту ситуацию.
EDIT: он оказывается ошибкой pgadmin. См. https://dba.stackexchange.com/questions/36137/
Ответ 2
pg_hba.conf
запись определяет методы входа в систему по IP-адресам. Чтобы получить правильную помощь, вам нужно показать соответствующую часть pg_hba.conf
.
Измените эту строку:
host all all <my-ip-address>/32 md5
Чтобы отразить настройки локальной сети. Итак, если ваш IP 192.168.16.78
(класс C) с маской 255.255.255.0
, тогда поставьте это:
host all all 192.168.16.0/24 md5
Убедитесь, что ваша WINDOWS MACHINE находится в этой сети 192.168.16.0
и повторите попытку.
Ответ 3
Я столкнулся с этим вопросом, и ответы здесь не сработали для меня; я не мог понять, почему я не могу войти и получил вышеуказанную ошибку.
Оказывается, postgresql сохраняет имена пользователей в нижнем регистре, но во время аутентификации он использует как верхний, так и нижний регистр.
CREATE USER myNewUser WITH PASSWORD 'passWord';
создаст пользователя с именем пользователя mynewuser и паролем passWord.
Это означает, что вы должны аутентифицироваться с помощью "mynewuser", а не с помощью "myNewUser". Для новичков в pgsql, подобных мне, это было непонятно. Надеюсь, это поможет другим, столкнувшимся с этой проблемой.