подключиться к серверу PostgreSQL: FATAL: нет записи в pg_hba.conf для хоста

178

Здравствуйте, я пытаюсь запустить отправленный мне сайт, но после этого появилась эта ошибка

connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "4X.XXX.XX.XXX", user "userXXX", database "dbXXX", SSL off in C:\xampp\htdocs\xmastool\index.php on line 37

после Google это говорит, что мне просто нужно добавить запись в файле pg_hba.conf для этого конкретного пользователя. это мой файл pg_hba.conf.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
local dbXXX userXXX md5
host    dbXXX  userXXX  XX.XXX.XXX.XXX           md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

но после этого ошибка все еще сохраняется. Я перезагружал свой сервер XAMPP несколько раз, но никаких изменений не появляется. заранее спасибо

Jin
источник
Вы перезапустили сам PostgreSQL, а не только веб-сервер? Попробуй SELECT pg_reload_conf().
Крейг Рингер

Ответы:

220

Добавьте или отредактируйте следующую строку в вашем postgresql.conf:

listen_addresses = '*'

Добавьте следующую строку в качестве первой строки pg_hba.conf. Это позволяет доступ ко всем базам данных для всех пользователей с зашифрованным паролем:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Перезапустите Postgresql после добавления этого с помощью service postgresql restartили эквивалентной команды для вашей установки.

Жером Радикс
источник
5
Обратите внимание, что для того, чтобы это работало, для пользователя должен быть установлен пароль : sudo -u <username> psql postgresзатем \passwordв появившемся запросе sql появится запрос на его установку.
Иосиф
2
Не забудьте перезапустить postgresql после добавления этого: service postgresql restart
ammills01
Если вы хотите немного дополнительной защиты, ограничивающей подключения к частным доменам (например, внутри офиса, а не к остальной части Интернета), вы можете изменить первый номер на 10, 172 или 192 в соответствии с вашей сетью: например, 172.0. 0.0 / 0 вместо 0.0.0.0/0
Нейт
22

Это решение работает для IPv4 / IPv6

nano /var/lib/pgsql/data/pg_hba.conf

добавить в финал

host all all      ::1/128      md5
host all postgres 127.0.0.1/32 md5

а затем перезапустите сервис postgresql

/etc/init.d/postgresql restart
Хосе Нобиле
источник
12

Я решил это следующим образом:

Добавлена ​​строка, как показано ниже pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

и это было изменено в postgresql.conf, как показано:

listen_addresses = '*'  

У меня этот экземпляр работал на Centos 7.3 и Postgres 9.5 на виртуальной машине в Azure , учитывая, что это был POC (подтверждение концепции), который вы не захотите подключать без SSL в вашей реальной среде разработки.

Для подключения к экземпляру я использовал pgAdmin 4 на macOS Sierra .

Роберто Лопес
источник
4
Не только SSL ... для всего, что не является доказательством концепции и доступно для сети, вы не будете доверять соединениям, вам потребуется некоторая аутентификация .
Жуаноло
5

Fresh Postgres 9.5 установить, Ubuntu.

Ключ был локальным типом соединения, так как psql использует соединение с сокетом домена.

pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
local all all md5
host  all  all 0.0.0.0/0 md5
willianpts
источник
3

У меня была такая же ошибка, когда я пытался подключиться к локальной базе данных, используя туннель SSH. Я решил это, изменив имя хоста с localhostна 127.0.0.1.

тонкость
источник
3
  1. Добавьте следующую строку внизу pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Добавить / изменить строку в postgresql.conf:

    listen_addresses = '*'

  3. УБЕДИТЕСЬ, ЧТО У пользователя, который подключается, есть пароль: (Пример подключения пользователя по имени postgres)

    а. Запустите следующую psqlкоманду с postgresучетной записью пользователя:

    sudo -u postgres psql postgres

    б. Установите пароль:

    # \password postgres

введите описание изображения здесь

Nguyên
источник
1
Не используйте доверие для удаленных подключений
eckes
2

Найдите правильный файл конфигурации:

su - postgres -c "psql -t -P format=unaligned -c 'show hba_file';"

Добавьте следующее в конец файла:

local all all peer

Затем перезапустите приложение PostgreSQL:

/bin/systemctl restart postgresql*.service
Feriman
источник
1

В моем случае я должен был добавить точную строку, как указано в информации об ошибке. Нельзя обойти это, добавив «всех» пользователей со всеми IP-адресами, как правило. Теперь это как:

PosgreSQL 10.5 на CentOS 7.

# IPv4 local connections:
host    all             all             127.0.0.1/32                    md5
host    <db_name>       postgres        <my_client_machine_ip>/32       md5
WesternGun
источник
1

Это ниже работало для меня: (pg_hba.conf)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only     
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
host    all             all             0.0.0.0/0               trust

доверять

Разрешить соединение безоговорочно. Этот метод позволяет любому, кто может подключиться к серверу базы данных PostgreSQL, войти в систему под любым желаемым пользователем PostgreSQL без необходимости ввода пароля или какой-либо другой аутентификации.

md5

Требовать от клиента предоставления пароля с двойным хэшированием MD5 для аутентификации.

см. больше здесь

Ravistm
источник
0

Инструкции для пользователей Debian.

Войти как пользователь posgres:

$ sudo su - postgres

Получите местоположение pg_hba.conf, запросив базу данных:

$ psql -c "SHOW hba_file;"

              hba_file               
-------------------------------------
/etc/postgresql/11/main/pg_hba.conf
(1 row)

Откройте pg_hba.conf:

nano /etc/postgresql/11/main/pg_hba.conf

Добавьте конфигурацию там, где написано «Поместите свою фактическую конфигурацию здесь»:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

Выход из системы для вашего пользователя:

$ exit
logout

Перезапустите сервер Postgres, чтобы изменения вступили в силу:

$ sudo systemctl restart postgresql
Евгений Кулабухов
источник
-1

Это работает для меня, только добавив следующую конфигурацию:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             0.0.0.0/0               md5
Навьёт Верма
источник
-4

Просто напишите следующую последовательность в файле конфигурации:

const 
  pg                = require('pg'),
config          = require('./db-config'),
    dbOption    = {
      host    : ,
      port    : ,
      user    : ,
      password  :,
      database  : 
    },

  pool          = new pg.Pool(dbOption)
  pg.defaults.ssl = true;

Это все. Файл db-configсодержит данные спецификации хоста, пользователя, пароля и базы данных. С этим небольшим изменением он отлично работает как локально, так и в службе пропусков (Heroku). Полностью проверено.

Хосе Арредондо
источник
Что (и где) это db-config? Это конфигурационный файл XAMPP?
ypercubeᵀᴹ