PostgreSQL Error 28000: invalid_authorization_specification — настройка pg_hba.conf
- Ошибка при подключении:
FATAL: no pg_hba.conf entry for host ..., user ..., database ... (SQLSTATE 28000). - Отказ в установлении соединения при миграции сервисов на новые IP-адреса.
- Невозможность подключиться к СУБД без указания имени пользователя или пароля.
1. Анализ ошибки в журнале PostgreSQL
tail -n 50 /var/log/postgresql/postgresql-15-main.log | grep "28000"2. Настройка файла контроля доступа pg_hba.conf
Откройте файл /etc/postgresql/15/main/pg_hba.conf и добавьте разрешающие правила для подсети серверов приложений 1С:
# TYPE DATABASE USER ADDRESS METHOD
# Разрешить локальные подключения через сокет
local all all peer
# Разрешить подключения кластера 1С по IPv4 с использованием SCRAM
host all all 192.168.10.0/24 scram-sha-256
host all all 127.0.0.1/32 scram-sha-2563. Применение изменений без перезагрузки
SELECT pg_reload_conf();
-- Либо из терминала:
pg_ctlcluster 15 main reload4. Проверка прав пользователя на подключение к базе данных
GRANT CONNECT ON DATABASE my_database TO my_user; Частые вопросы (FAQ)
В чем разница между ошибками 28000 и 28P01?
Код 28000 означает, что само подключение запрещено правилами pg_hba.conf (нет подходящей записи), а 28P01 означает, что правило найдено, но передан неверный пароль.
Имеет ли значение порядок строк в файле pg_hba.conf?
Да! PostgreSQL читает pg_hba.conf сверху вниз и применяет первое совпавшее по параметрам (TYPE, DATABASE, USER, ADDRESS) правило.
Почему после изменения pg_hba.conf подключение не работает?
Убедитесь, что вы выполнили команду pg_reload_conf() или systemctl reload postgresql для перечитывания конфигурации.
Что означает метод аутентификации peer?
Метод peer проверяет соответствие имени системного пользователя ОС в Linux с именем пользователя в PostgreSQL. Работает только через локальный Unix-сокет.