PostgreSQL Linux

PostgreSQL: FATAL — password authentication failed for user

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

FATAL: password authentication failed означает, что сервер PostgreSQL ответил на попытку входа, но проверка пароля или согласованного метода завершилась отказом. Сверьте роль, адрес и запись pg_hba.conf; меняйте пароль интерактивно и только при подтверждённой причине.

В этой статье
  1. Что на самом деле проверяет сервер
  2. Разбор причин
  3. Пошаговая проверка авторизации
  4. Сброс пароля
  5. Метод входа в pg_hba.conf
password authentication failed
FATAL: password authentication failed for user "app"
По-русскиОшибка аутентификации: неверный пароль либо для этого подключения настроен другой способ проверки.

#Что на самом деле проверяет сервер

Сообщение одинаково для нескольких разных ситуаций: пароль неверен, у роли пароль вообще не задан, имя роли отличается регистром, либо в pg_hba.conf для вашего адреса прописан метод, который клиент не может выполнить. Сервер намеренно не уточняет детали, а подробную причину пишет только в собственный журнал — смотреть нужно его.

Linux · Терминал (Bash)КомандаНужен sudo
В журнале будет строка DETAIL: например, «User "app" has no password assigned» или «Password does not match for user»
sudo tail -n 30 /var/log/postgresql/postgresql-16-main.log
sudo journalctl -u postgresql -n 30 --no-pager

Номер версии в имени файла (16) подставьте свой: ls /var/log/postgresql/.

#Разбор причин

Возможная причинаКак узнатьЧто делать
Неверный парольОпечатка, другая раскладка, лишний пробел при копировании или пароль из другого окружения.В журнале «Password does not match».Задайте новый пароль через ALTER USER.
Пароль у роли не заданПользователь создан без PASSWORD.В журнале «has no password assigned».Задайте пароль командой из шага ниже.
Не то имя пользователяИмена в кавычках чувствительны к регистру: "App" и app — разные роли.Пользователь, которого вы вводите, отсутствует в \du.Используйте точное имя из списка ролей.
Другой метод в pg_hba.confВ выбранном по адресу/роли правиле задан неподходящий метод аутентификации или роль не имеет пароля нужного типа. Метод md5 в pg_hba.conf может автоматически использовать SCRAM, если у роли сохранён SCRAM-пароль.Проблема воспроизводится у конкретного клиента и правила; детали видны в журнале сервера.Проверьте применённое правило и совместимость клиента с SCRAM, исправляйте настройку только после резервного копирования.
Старый клиентlibpq до версии 10 не умеет scram-sha-256.Ошибка только из старого приложения.Обновите библиотеку libpq или драйвер до версии с поддержкой SCRAM; не ослабляйте серверную аутентификацию ради устаревшего клиента.

#Пошаговая проверка авторизации

  1. Убедитесь, к какому серверу подключаетесьВ настройках приложения выпишите host, port, database и user, не публикуя пароль. Сверьте порт и имя базы с рабочим окружением: тестовая и промышленная базы могут иметь одинаковые имена ролей, но разные пароли. Если ошибка начинается с password authentication failed, соединение дошло до PostgreSQL; изменение настроек сетевого порта обычно не исправит эту ошибку.
  2. Прочитайте журнал сервера и проверьте имя ролиНа сервере Linux откройте терминал. Если у вас есть административный доступ, выполните sudo journalctl -u postgresql -n 50 --no-pager; на Debian/Ubuntu журнал конкретного кластера можно найти в /var/log/postgresql/. Запишите время ошибки и имя роли, не копируя чужие пароли. При допустимом локальном доступе запустите sudo -u postgres psql и внутри psql выполните \du. Если роль отсутствует, проверьте экземпляр PostgreSQL; не создавайте автоматически новую роль.
  3. Проверьте правило доступа для фактического клиентаВ том же сеансе psql выполните SHOW hba_file; и откройте показанный файл только на чтение. Правила проверяются сверху вниз, применяется первое подходящее. Сверьте адрес клиента, базу, роль и метод. Для ошибок разбора можно выполнить SELECT line_number,error FROM pg_hba_file_rules WHERE error IS NOT NULL;. Изменять правила нужно с резервной копией, для конкретной подсети и только администратору; trust не используйте.
  4. При необходимости согласованно задайте новый парольЕсли пароль действительно утрачен, администратор БД, войдя в нужный экземпляр через psql, выполняет \password app, где app — реальное имя роли. Введите новый пароль дважды в ответ на запрос psql; не пишите его в командной строке, заметках или URL. Затем обновите секрет в конфигурации приложения и безопасно перезапустите только его соединения. Не меняйте пароль роли без согласования с владельцем работающих систем.
  5. Повторно проверьте вход с реального клиентаНа клиентском компьютере откройте терминал с установленным psql и введите psql -h 192.168.1.20 -p 5432 -U app -d appdb -W, заменив адрес, порт, роль и базу на реальные. Введите пароль в интерактивном запросе. Если открылась строка приглашения psql, соединение и аутентификация успешны; завершите сеанс через \q. Если ошибка повторяется, уточните сообщение и время в журнале, не ослабляя аутентификацию.

#Сброс пароля

Если у вас есть права системного администратора сервера, на Debian/Ubuntu с настроенной локальной peer-аутентификацией можно открыть psql от имени postgres. На других платформах способ входа администратора может отличаться. Перед сменой пароля убедитесь, что подключены к нужному экземпляру и согласовали изменение с владельцем приложения; новый пароль потребуется обновить в его защищённой конфигурации.

Linux · Терминал (Bash)КомандаНужен sudo
Откроет psql от имени postgres (peer-аутентификация по пользователю ОС)
sudo -u postgres psql
SQLКоманда
Команды выполняются внутри psql; app — пример имени существующей роли, замените его на реальное. \password запрашивает секрет интерактивно и не вставляет его в SQL-журнал или историю.
\du
\password app

Если роли нет, сначала выясните, к правильному ли кластеру и базе подключаетесь. Создание роли и базы — отдельная операция администратора с заданием минимально необходимых прав; не выполняйте её автоматически ради устранения ошибки пароля. Учтите: изменение password_encryption не пересчитывает имеющиеся хеши; при согласованной смене метода пароль задаётся заново.

#Метод входа в pg_hba.conf

Файл разбирается сверху вниз, срабатывает первая подходящая строка. Найти его: sudo -u postgres psql -c "SHOW hba_file;".

pg_hba.conf
# TYPE  DATABASE  USER  ADDRESS         METHOD
local   all       postgres                peer
host    appdb     app   127.0.0.1/32    scram-sha-256
host    appdb     app   192.168.1.0/24  scram-sha-256

На Linux/Unix изменения pg_hba.conf применяются после перечитывания конфигурации (SELECT pg_reload_conf(); из psql администратора); в Windows новые подключения обычно используют обновлённый файл сразу. Полный перезапуск для этих правил не нужен. Изменяйте правила только для нужных базы/роли и адреса клиента; не заменяйте метод входа на trust ради обхода ошибки. Проверьте подключение с клиента командой psql -h 127.0.0.1 -U app -d appdb -W, заменив параметры на фактические.

Linux · Терминал (Bash)Команда
Подключение по TCP с запросом пароля, как это делает приложение
psql -h 127.0.0.1 -U app -d appdb -W

В URL-строке подключения специальные символы внутри пароля должны быть закодированы в процентах по правилам URL; более надёжный вариант — передавать параметры подключения раздельно через драйвер или защищённый секрет. Не печатайте пароли и не сохраняйте их в открытом виде в конфигурации. Успех — подключение проходит без FATAL, а приложение использует обновлённые учётные данные.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.