Пользователь PostgreSQL не может подключиться к серверу после смены пароля

10

Я встречал это с четырьмя ролями, которые я создал:
После изменения пароля для пользователя в pgAdmin III с помощью графического интерфейса (1), этот пользователь больше не может войти в систему.
pgAdmin III показать сообщение об ошибке:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Моя система: Postgresql 9.2 в Ubuntu 12.04

Есть ли способ это исправить?

(1): войдите с учетной записью postgres, щелкните правой кнопкой мыши пользователя в разделе «Роли входа в систему», перейдите на вкладку «Определение» и введите пароль.

Цао Минь Ту
источник

Ответы:

15

Возможно, вас укусила эта ошибка PgAdmin ( changelog ):

2012-11-28 AV 1.16.1 Элементы управления выбора даты по умолчанию возвращают полную метку времени, что может привести к случайным изменениям дат в заданиях и датах действия ролей. Игнорировать часть времени.

Эта ошибка была замечена, чтобы установить даты истечения срока действия пароля далеко, например, 01.01.1970. В этом случае сообщение об ошибке при попытке подключения ничем не отличается от неверного пароля.

Вы можете проверить эти даты истечения срока действия с:

SELECT usename,valuntil FROM pg_user;

и если они не правы, сбросьте их с помощью:

ALTER USER username VALID UNTIL 'infinity';

и обновите pgAdmin.

Даниэль Верите
источник
Большое спасибо! Это решило проблему. Каждый раз, когда я сбрасываю пароль пользователя, pgAdmin устанавливает действительное время до 01-01-1970, чтобы пользователь больше не мог войти в систему.
Цао Мин Ту
Ты понял! чертовы ошибки
Картер Коул
Как именно я должен войти в PSQL ??? Это роль, которую я только что обновил.
ericpeters0n
1
@ ericpeters0n: временно переключите метод аутентификации на trustили peerв pg_hba.confфайл для этой учетной записи.
Даниэль Верите
Спасибо, разобрались. Для тех, кто придет позже, «доверие» означает, что: Как только вы перезапустили postgres, вы можете запустить psql без аутентификации по паролю, если вы являетесь пользователем с тем же именем, что и привилегированный пользователь (например, имя пользователя «postgres»). Таким образом, «su - postgres psql» позволит вам войти в систему и исправить пароль или действительную дату.
ericpeters0n
3

Самое простое - войти в систему с помощью psql или pgAdmin и

ALTER USER sam WITH PASSWORD 'new_password';

Теперь, если вы не можете войти в систему с учетной записью суперпользователя, вы можете восстановить, изменив настройки pg_hba.conf для этого пользователя и перезагрузив конфигурацию (иногда я нахожу, что это требует перезагрузки сервера, но я не уверен, почему).

Что вы можете сделать, это добавить строку, которая позволяет вам войти в систему, используя метод Identif (peer в 9.2) (если вы можете использовать локальную системную учетную запись с тем же именем, что и у пользователя) для локальных подключений для пользователя, или (если это невозможно) установить "доверие" (очень временно!). Если вы используете доверие, отмените его как можно скорее, поскольку это означает «доверять тому, кто является пользователем, которого он / она требует!» и, следовательно, этот параметр опасно оставлять включенным вне срочных потребностей восстановления.

После входа в систему вы можете сбросить пароль выше.

Крис Траверс
источник
Разве pgAdmin не должен выполнять ту же команду?
Дезсо
(отмечая, что я сказал psql или pgAdmin. Что я могу сделать, чтобы сделать его понятнее?)
Крис Трэверс
Нет-нет, я просто подумал, что смена паролей в GUI делает то же самое. Если это так, я не могу себе представить, что может пойти не так?
Дезсо
Что может пойти не так? Опечатки в пароле для начинающих ....
Крис Траверс
Разве нельзя просто снова установить пароль после входа в систему как postgres?
Дезсо
2

Для варианта Windows - я тоже столкнулся с этой неприятной ошибкой из-за pgAdmin для моей установки Windows x64 версии 9.2. Это оставило мое производство парализованным.

В папке C:\Program Files\PostgreSQL\9.2\dataили C:\Program Files (x86)\PostgreSQL\9.**x**\dataвы найдете текстовый файл pg_hba.conf .

Найдите следующие строки:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

и измените МЕТОД md5 на «доверие» следующим образом:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Из Windows>Runтипа «services.msc» и [enter] найдите нужный экземпляр PostgreSQL и перезапустите его.

Ваша безопасность БД теперь взорвана! Обратите внимание на предупреждение, чтобы оно вернулось обратно в md5 после изменения срока действия пароля пользователя на 2099 год для всех соответствующих пользователей.

Хоанг До
источник
1

Если вы еще не пробовали, просмотрите файл pg_hba.conf. Он будет назван примерно так: /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); вам, возможно, придется использовать 'find / -name pg_hba.conf', чтобы найти его.

В нижней части файла измените значения «МЕТОД» на «доверие» для локального тестирования (для получения дополнительной информации см. Документацию postgres). Перезагрузите машину, чтобы убедиться, что все запущено и все новые параметры прочитаны.

Надеюсь, это вылечит ваши беды. Это решило мои проблемы на Fedora 20 с PostgreSQL 9.3.

ОБНОВЛЕНИЕ 2016-10-14:

В Ubuntu требуемое имя файла /etc/postgresql/9.5/main/pg_hba.conf. Только для локального тестирования , измените его так:

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

Две строки с методом «доверие» являются новыми. Они позволяют подключаться без имени пользователя / пароля.

По завершении вам нужно будет перезагрузить сервер через:

sudo systemctl restart postgresql 
Алан Томпсон
источник
Чтобы pg_hba.confэффект вступил в силу, вам нужна только перезагрузка, а не перезагрузка. Кроме того, ваше предложение выглядит неполным, так как неясно, как это решит проблему в конце.
Дезсо
1

У меня была такая же проблема, и оказалось, что у меня было несколько пользователей с одним и тем же именем (разные случаи). Как только я объединил собственника и удалил одно, это было по крайней мере ясно. В зависимости от способа подключения, дело не обязательно передавалось для аутентификации.

Джордж
источник