Truy cập từ xa cơ sở dữ liệu postgresql


46

Tôi cần truy cập cơ sở dữ liệu postgresql từ một máy từ xa trên VPS tại DigitalOcean chạy 12.10 và postgresql 9.1.

Làm thế nào để tôi làm điều này? Tôi nhận thấy cổng 5432 đã bị đóng, làm cách nào để mở cổng này?


1
Thực hiện theo các bước được đề cập trong javabypatel.blogspot.in/2015/07/ và thay đổi số cổng có trong tệp postgresql.conf. Sau khi thay đổi cổng khởi động lại máy chủ PostgreSQL.
Jayesh

Url được đăng bởi @Jayesh đã làm điều đó. Làm theo hướng dẫn và thành công đã khiến một trong những máy tính phát triển của tôi kết nối với một máy tính khác (từ Windows với pgAdmin4 đến Ubuntu 18.04 postgresql 10.9)
EAmez

Câu trả lời:


78

Để mở cổng 5432, hãy chỉnh sửa /etc/postgresql/9.1/main/postgresql.confvà thay đổi

listen_addresses='localhost'

đến

listen_addresses='*'

và khởi động lại DBMS của bạn

invoke-rc.d postgresql restart

bây giờ bạn có thể kết nối với

$ psql -h hostname -U username -d database

nếu bạn không thể tự xác thực, thì bạn cần cấp cho người dùng quyền truy cập vào cơ sở dữ liệu của bạn

Chỉnh sửa của bạn

/etc/postgresql/9.1/main/pg_hba.conf

và thêm

host all all all md5

(Điều này là để truy cập mở rộng. Để kiểm soát chặt chẽ hơn, hãy tham khảo tài liệu pg_hba.conf và điều chỉnh theo nhu cầu của bạn).

Sau đây bạn cũng cần tải lại

invoke-rc.d postgresql reload

Tôi không cần đề cập rằng đây là cấu hình cơ bản, bây giờ bạn nên suy nghĩ về việc sửa đổi tường lửa của mình và cải thiện tính bảo mật của DBMS.


4
Đặc biệt, bạn nên kích hoạt SSL.
Craig Ringer

Okey, tôi đã thử điều này, nhưng khi tôi cố gắng kết nối bằng pgAdmin từ máy tính của mình, tôi nhận được "Máy chủ không nghe". Tôi đã thêm vào iptables và khi tôi chạy iptables -L các chương trình sau: ACCEPT tcp - mọi nơi mọi nơi tcp dpt: postgresql Khi kiểm tra IP và PORT trên trang web này ( yougetsignal.com/tools/open-ports ), nó nói cảng đã đóng
Øyvind

2
máy chủ có nghe không? kiểm tra vớinetstat -nlt|grep :5432

1
Tôi sẽ chèn hàng máy chủ theo cách nghiêm ngặt hơn:host <database> <user> <remote_client_IPaddress>/24 md5
gc5

Đối với Postgresql phiên bản 9.5, bạn có thể cần phải khởi động lại máy chủ trước khi list_addresses có hiệu lực.
Heather92065

26

Điều này không còn hoạt động nữa, nếu nó đã từng:

lưu trữ tất cả * md5

Các dòng chính xác có thể cho điều này là:

lưu trữ tất cả phạm vi 0.0.0.0/0 md5 # ipv4

lưu trữ tất cả :: 0/0 md5 # ipv6 phạm vi

lưu trữ tất cả tất cả md5 #all ip

Nguồn


4
Điều này chắc chắn đã lừa Câu trả lời trên chắc chắn không hoạt động.
Mike

Vui lòng @Mike thể hiện điều gì là đúng: host all all all md5sẽ hoạt động tốt? Đúng Vậy? có vấn đề gì về bảo mật không?
Peter Krauss

@peterkrauss Vâng, lưu trữ tất cả md5 làm việc cho tôi. Vấn đề bảo mật? Tất nhiên là vậy, nhưng với những gì tôi đang làm thì thật tuyệt. (Mạng nội bộ)
Mike

3

Đối với thông báo "máy chủ không lắng nghe", điều đó xảy ra với tôi là, tôi không xóa # trên kho lưu trữ postgresql.conf, ý tôi là:

# nghe_addresses = 'localhost'

đến:

nghe_addresses = '*'

(Xin lỗi vì tiếng Anh của tôi).


0

Câu trả lời được bình chọn và chấp nhận cao nhất có những sai sót nghiêm trọng về an ninh. Phương pháp này bị tắt theo mặc định vì lý do tốt.

Sử dụng tốt hơn chuyển tiếp cổng cục bộ với ssh:

ssh -L local_port:localhost:foreign_port user@server

Bắt đầu chuyển tiếp cổng:

ssh -L 5432:localhost:5432 user@your-server.com
#or
ssh -L 5432:127.0.0.1:5432 user@your-server.com

(Thay đổi cổng địa phương và nước ngoài để phù hợp với cấu hình của bạn).

Sau đó, bạn có thể kết nối trực tiếp với cơ sở dữ liệu từ máy tính cục bộ của mình:

psql -U db_user -p local_port -l
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.