kết nối với máy chủ PostgreSQL: FATAL: không có mục pg_hba.conf cho máy chủ


178

Xin chào Tôi đang cố chạy một trang web gửi cho tôi nhưng sau khi làm như vậy thì lỗi này xuất hiện

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

sau khi Google , nó nói rằng tôi chỉ cần thêm một mục trong tệp pg_hba.conf cho người dùng cụ thể đó. đây là tập tin pg_hba.conf của tôi.

# 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

nhưng sau khi làm như vậy, lỗi vẫn còn. Tôi đã khởi động lại máy chủ XAMPP của mình nhiều lần nhưng không có thay đổi nào xuất hiện. Cảm ơn trước


Bạn đã tự khởi động lại PostgreSQL chưa, không chỉ máy chủ web? Hãy thử SELECT pg_reload_conf().
Craig Ringer

Câu trả lời:


220

Thêm hoặc chỉnh sửa dòng sau trong postgresql.conf:

listen_addresses = '*'

Thêm dòng sau đây là dòng đầu tiên của pg_hba.conf. Nó cho phép truy cập vào tất cả các cơ sở dữ liệu cho tất cả người dùng bằng mật khẩu được mã hóa:

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

Khởi động lại Postgresql sau khi thêm lệnh này bằng service postgresql restarthoặc lệnh tương đương cho thiết lập của bạn.


5
Lưu ý rằng để làm việc này, mật khẩu phải được đặt cho người dùng : sudo -u <username> psql postgres, sau đó, \passwordtại dấu nhắc sql kết quả sẽ nhắc để đặt mật khẩu .
ijoseph

2
Đừng quên khởi động lại postgresql sau khi thêm điều này: dịch vụ khởi động lại postgresql
ammills01

Nếu bạn muốn bảo mật thêm một chút, giới hạn các kết nối đến các miền riêng tư (chẳng hạn như trong văn phòng chứ không phải phần còn lại của Internet), bạn có thể thay đổi số đầu tiên thành 10, 172 hoặc 192 để khớp với mạng của mình: ví dụ: 172.0. 0,0 / 0 thay vì 0,0.0.0 / 0
Nate Wanner

22

Giải pháp này hoạt động cho IPv4 / IPv6

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

thêm vào cuối cùng

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

và sau đó khởi động lại dịch vụ postgresql

/etc/init.d/postgresql restart

12

Cách tôi giải quyết điều này là:

Đã thêm dòng như dưới đây trong pg_hba.conf:

hostnossl    all          all            0.0.0.0/0  trust        

và điều này đã được sửa đổi trong postgresql.conf, như được hiển thị:

listen_addresses = '*'  

Tôi đã có phiên bản này chạy trên Centos 7.3Postgres 9.5 trong máy ảo trong Azure , với điều này là POC (bằng chứng về khái niệm) mà bạn sẽ không muốn kết nối mà không có SSL trong môi trường prod thực tế của bạn.

Để kết nối với ví dụ tôi đã sử dụng pgAdmin 4 trên macOS Sierra .


4
Không chỉ SSL ... trên bất kỳ thứ gì không phải là bằng chứng của khái niệm và có thể truy cập mạng, bạn sẽ không tin tưởng các kết nối, bạn sẽ yêu cầu một số xác thực .
joanolo

5

Cài đặt Postgres mới 9.5, Ubuntu.

Chìa khóa là loại kết nối cục bộ , vì psql sử dụng kết nối ổ cắm miền.

pg_hba.conf

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

3

Tôi đã gặp lỗi tương tự khi tôi cố gắng kết nối với cơ sở dữ liệu cục bộ bằng đường hầm SSH. Tôi đã giải quyết nó bằng cách thay đổi tên máy chủ từ localhostsang 127.0.0.1.


3
  1. Thêm dòng sau vào dưới cùng của pg_hba.conf:

    hostnossl all all 0.0.0.0/0 md5

  2. Thêm / sửa đổi dòng trong postgresql.conf:

    listen_addresses = '*'

  3. ĐẢM BẢO RATNG người dùng đang kết nối có mật khẩu: (Ví dụ kết nối người dùng có tên postgres)

    a. Chạy psqllệnh sau với postgrestài khoản người dùng:

    sudo -u postgres psql postgres

    b. Đặt mật khẩu:

    # \password postgres

nhập mô tả hình ảnh ở đây


1
Đừng sử dụng niềm tin cho các kết nối từ xa
eckes

2

Tìm tập tin cấu hình đúng:

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

Thêm phần sau vào cuối tập tin:

local all all peer

Sau đó khởi động lại ứng dụng PostgreSQL của bạn:

/bin/systemctl restart postgresql*.service

1

Trong trường hợp của tôi, tôi đã phải thêm dòng chính xác theo đề xuất của thông tin lỗi. Không thể bỏ qua nó bằng cách thêm "tất cả" người dùng với tất cả IP làm quy tắc. Bây giờ nó giống như:

PosgreSQL 10.5 trên 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

Điều này dưới đây làm việc cho tôi: (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

Lòng tin

Cho phép kết nối vô điều kiện. Phương pháp này cho phép bất kỳ ai có thể kết nối với máy chủ cơ sở dữ liệu PostgreQuery để đăng nhập như bất kỳ người dùng PostgreQuery nào họ muốn mà không cần mật khẩu hoặc bất kỳ xác thực nào khác.

md5

Yêu cầu khách hàng cung cấp mật khẩu băm kép MD5 để xác thực.

tham khảo thêm tại đây


0

Hướng dẫn cho người dùng Debian.

Đăng nhập với tư cách người dùng posgres:

$ sudo su - postgres

Lấy vị trí của pg_hba.conf bằng cách truy vấn cơ sở dữ liệu:

$ psql -c "SHOW hba_file;"

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

Mở pg_hba.conf:

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

Thêm cấu hình trong đó ghi "Đặt cấu hình thực tế của bạn ở đây":

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

Thoát khỏi người dùng của bạn:

$ exit
logout

Khởi động lại máy chủ postgres của bạn để các thay đổi có hiệu lực:

$ sudo systemctl restart postgresql

-1

Nó chỉ hoạt động với tôi khi thêm cấu hình dưới đây:

# 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

Chỉ cần viết trình tự sau trong tệp cấu hình:

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

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

Đây là tất cả. Các tập tin db-configchứa dữ liệu đặc điểm kỹ thuật của máy chủ, người dùng, mật khẩu và cơ sở dữ liệu. Với thay đổi nhỏ này, nó hoạt động hoàn hảo cả cục bộ và trong dịch vụ vượt qua (Heroku). Đã kiểm tra đầy đủ.


Đây là gì (và ở đâu) db-config? Đây có phải là tập tin cấu hình XAMPP không?
ypercubeᵀᴹ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.