підключення до сервера 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

після Googling це говорить, що мені просто потрібно додати запис у файл 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-сервер кілька разів, але жодних змін не з’явилося. Спасибі заздалегідь


Ви перезапустили 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 в VM в Azure , враховуючи, що це POC (доказ концепції), ви не хочете підключатися без SSL у вашому фактичному середовищі продукту.

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


4
Не тільки SSL ... в усьому, що не є доказом концепції та є доступним до мережі, ви б не довіряли з'єднанням, вам знадобиться деяка автентифікація .
joanolo

5

Встановити свіжий 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

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

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


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

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

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 для аутентифікації.

див. докладніше тут


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