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


10

Я зустрів це з чотирма створеними мною ролями:
Після зміни пароля для користувача в pgAdmin III за допомогою GUI (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): увійдіть із поштовими адресами облікового запису, клацніть правою кнопкою миші користувача у ролях входу, перейдіть на вкладку «Визначення» та введіть пароль

Відповіді:


15

Можливо, вас покусав ця помилка PgAdmin ( журнал змін ):

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

Було помічено, що ця помилка встановлює дати закінчення терміну дії пароля, наприклад, 1/1/1970. У цьому випадку повідомлення про помилку при спробі підключення не відрізняється від помилкового пароля.

Ви можете перевірити ці терміни придатності за допомогою:

SELECT usename,valuntil FROM pg_user;

і якщо вони помиляються, скиньте їх за допомогою:

ALTER USER username VALID UNTIL 'infinity';

та оновлення pgAdmin.


Дуже дякую! Це вирішило проблему. Кожен раз, коли я скидаю пароль користувача, pgAdmin встановлює дію до часу 01-01-1970, щоб користувач більше не міг увійти.
Cao Minh Tu

ти зрозумів! прокляті помилки
Картер Коул

Як саме я повинен увійти до psql ??? Це роль, яку я щойно оновив.
ericpeters0n

1
@ ericpeters0n: тимчасово перемкніть метод аутентифікації на trustабо peerу pg_hba.confфайл для цього облікового запису.
Даніель Верете

Спасибі, розібралися. Для тих, хто з’явиться пізніше, "довіра" означає, що: Після перезавантаження поштових повідомлень ви можете запустити psql без автентифікації пароля, якщо ви користуєтесь тим самим іменем, що і привілейований користувач (наприклад, ім'я користувача "postgres"). Отже, "su - postgres psql" дозволить вам увійти та виправити пароль або дійсну дату.
ericpeters0n

3

Найпростіша річ - це увійти за допомогою psql або pgAdmin та

ALTER USER sam WITH PASSWORD 'new_password';

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

Що ви можете зробити, це додати рядок, який дозволяє входити в систему за допомогою методу ident (peer in 9.2) (якщо ви можете використовувати обліковий запис локальної системи з тим самим іменем, що і користувач) для локальних з'єднань для користувача, або (якщо що неможливо) встановити на "довіру" (дуже тимчасово!). Якщо ви використовуєте довіру, поверніться якомога швидше, оскільки це означає "довіряйте, що користувач - це той, на кого він / вона претендує!" і, отже, цей параметр небезпечно залишати ввімкненим поза межами негайних потреб відновлення.

Після входу ви можете скинути пароль вище.


Чи не повинен pgAdmin виконувати ту саму команду?
dezso

(зауваживши, що я сказав psql або pgAdmin. Що я можу зробити, щоб було зрозуміліше?)
Кріс Траверс

Ні-ні, я просто думав, що зміна паролів у графічному інтерфейсі робить саме те саме. Якщо це так, я не можу уявити, що може піти не так?
dezso

Що може піти не так? Друкарські помилки в паролі для початківців ....
Кріс Траверс

Не можна просто встановити пароль ще раз, коли ви увійшли як постгрес?
dezso

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

і змінити METHOD 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", щоб знайти його.

У нижній частині файлу змініть значення "METHOD" на "довіряти" для локального тестування (для отримання повної інформації див. Документи 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

Дві лінії з методом "довіра" METHOD є новими. Вони дозволяють вам підключитися без імені користувача / пароля.

Після завершення вам потрібно буде перезапустити сервер через:

sudo systemctl restart postgresql 

Щоб pg_hba.confнабути чинності, вам потрібно лише перезавантаження, а не перезапуск. Крім того, ваша пропозиція виглядає неповною, оскільки не зрозуміло, як вона врешті вирішить проблему.
dezso

1

У мене просто була ця сама проблема, і виявилося, що у мене кілька користувачів з однаковою назвою (різні випадки). Як тільки я об'єднав право власності та вилучив одне, це було принаймні зрозуміло. Залежно від способу з'єднання, справа не обов'язково передається для автентифікації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.