Làm cách nào để kết nối với cơ sở dữ liệu PostgreQuery từ xa trên Ubuntu bằng pgAdmin3?


22

Tôi đang cố gắng thiết lập cơ sở dữ liệu PostgreSQL trên máy Ubuntu. Tôi muốn có thể truy cập nó bằng pgAdmin3 từ một máy từ xa. Làm thế nào để tôi thiết lập điều này?

Tôi đã cài đặt cơ sở dữ liệu PostgreSQL trên Ubuntu bằng cách sử dụng:

sudo apt-get install postgresql

Trong tôi /etc/postgresql/9.1/main/pg_hba.confcó dòng này:

host    all    all    all    password

vì vậy nó nên chấp nhận các kết nối từ tất cả các địa chỉ IPv4 và mật khẩu phải được gửi bằng văn bản rõ ràng (điều này là vì lý do phát triển).

Nếu tôi chạy lệnh này để xem dịch vụ nào đang chạy:

sudo netstat -tulpn

Tôi có thể thấy những dòng này, điều đó cho thấy PostgreSQL đang chấp nhận các kết nối trên cổng mặc định:

tcp    0    0    127.0.0.1:5432    0.0.0.0:*    LISTEN
3561/postgres

Khi tôi cố gắng kết nối với máy chủ PostgreSQL này từ một máy tính từ xa trên cùng một mạng cục bộ, tôi nhận được thông báo lỗi này:

Máy chủ không nghe

Máy chủ không chấp nhận kết nối: báo cáo thư viện kết nối

không thể kết nối với máy chủ: Kết nối bị từ chối Máy chủ có chạy trên máy chủ "10.0.1.7" và chấp nhận kết nối TCP / IP trên cổng 5432 không?

Tôi đã sử dụng postgresnhư tên người dùng và không có mật khẩu. Nhưng tôi cũng đã thử với postgresmật khẩu. Trên máy chủ cục bộ tôi có thể đăng nhập bằng:

sudo -u postgres psql postgres

Làm cách nào tôi có thể kết nối với cơ sở dữ liệu PostgreSQL chạy trên Ubuntu từ một máy từ xa bằng pgAdmin3?

Câu trả lời:


25

Dòng trong báo cáo netstat của bạn cho thấy rằng cơ sở dữ liệu chỉ nghe trên localhost: 5432 (127.0.0.1) cho các kết nối tcp đến.

Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 127.0.0.1:5432  0.0.0.0:*        LISTEN  3561/postgres

Vì vậy, nó chỉ có thể chấp nhận các kết nối tcp cục bộ bất kể bạn đã chỉ định quyền gì trong pg_hba.conf. pg_hba.conf chỉ chỉ định các kết nối được phép, nhưng không chỉ định giao diện nào dịch vụ của bạn sẽ nghe.

Các địa chỉ mà máy chủ lắng nghe được chỉ định với GUC lắng nghe trong postgresql.conf . Nếu bạn muốn máy chủ lắng nghe các kết nối từ xa, bạn nên chỉ định (các) ip bạn muốn nghe hoặc *nghe trên tất cả các giao diện có sẵn trên máy chủ.

Để máy chủ postgresql của bạn lắng nghe trên tất cả các giao diện trên máy chủ, bạn nên có dòng sau trong postgresql.conf:

listen_addresses = '*'

nhưng tôi đã chỉ định alltrong pg_hba.conftệp ... vì vậy nó sẽ chấp nhận kết nối từ tất cả các địa chỉ IP.
Jonas

Có lẽ tôi có thể nói rõ hơn. pg_hba không chỉ định cơ sở dữ liệu nghe gì, chỉ cho phép kết nối giao thức / db / user / remote-addr nào được phép.
dbenhur

Ok, vậy làm cách nào để khắc phục điều này? Bạn có đề nghị nào không?
Jonas

1
bạn sửa nó bằng cách đặt một dòng listen_addresses = '*'trong postgresql.conf và khởi động lại máy chủ của bạn.
dbenhur

Cảm ơn, điều này đã giải quyết vấn đề này. Bây giờ tôi chỉ gặp vấn đề với mật khẩu mặc định :(
Jonas
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.