Mengakses basis data postgresql dari jarak jauh

46

Saya perlu mengakses database postgresql dari mesin jarak jauh pada VPS di DigitalOcean yang menjalankan 12.10 dan postgresql 9.1.

Bagaimana saya melakukan ini? Saya perhatikan port 5432 ditutup, bagaimana saya membuka ini?

Øyvind
sumber
1
Ikuti langkah-langkah yang disebutkan dalam javabypatel.blogspot.in/2015/07/... dan ubah nomor port yang ada di file postgresql.conf. setelah mengubah port restart server PostgreSQL.
Jayesh
Url yang diposting oleh @Jayesh berhasil. Ikuti petunjuk dan berhasil membuat salah satu komputer pengembangan saya terhubung ke yang lain (dari Windows dengan pgAdmin4 ke Ubuntu 18,04 postgresql 10.9)
EAmez

Jawaban:

79

Untuk membuka port 5432, edit /etc/postgresql/9.1/main/postgresql.confdan ubah

listen_addresses='localhost'

untuk

listen_addresses='*'

dan mulai kembali DBMS Anda

invoke-rc.d postgresql restart

sekarang Anda dapat terhubung dengan

$ psql -h hostname -U username -d database

jika Anda tidak dapat mengotentikasi diri sendiri, maka Anda perlu memberikan hak akses pengguna ke database Anda

Edit

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

dan tambahkan

host all all all md5

(Ini untuk akses terbuka lebar. Untuk kontrol yang lebih ketat, lihat dokumentasi pg_hba.conf dan sesuaikan sesuai kebutuhan Anda).

Selanjutnya Anda juga perlu memuat ulang

invoke-rc.d postgresql reload

Saya tidak perlu menyebutkan bahwa ini adalah konfigurasi dasar, sekarang Anda harus berpikir tentang memodifikasi firewall Anda dan meningkatkan keamanan DBMS Anda.

Daniel Vérité
sumber
4
Secara khusus, Anda harus mengaktifkan SSL.
Craig Ringer
Okey, saya mencoba ini, tetapi ketika saya mencoba terhubung menggunakan pgAdmin dari komputer saya, saya mendapatkan "Server tidak mendengarkan". Saya menambahkan ke iptables, dan ketika saya menjalankan iptables -L berikut ini menunjukkan: MENERIMA tcp - di mana saja di mana saja tcp dpt: postgresql Ketika memeriksa IP dan PORT di situs ini ( yougetsignal.com/tools/open-ports ), katanya port ditutup
Øyvind
2
Apakah server mendengarkan? periksa dengannetstat -nlt|grep :5432
1
Saya akan memasukkan baris host dengan cara yang lebih ketat:host <database> <user> <remote_client_IPaddress>/24 md5
gc5
Untuk Postgresql versi 9.5 Anda mungkin perlu me-restart server sebelum listen_addresses mulai berlaku.
Heather92065
26

Ini tidak berfungsi lagi, jika pernah:

tuan rumah semua * md5

Baris yang mungkin benar untuk ini adalah:

host semua semua rentang 0,0.0.0/0 md5 # ipv4

host semua semua :: 0/01 md5 # kisaran ipv6

tuan rumah semua semua md5 #semua ip

Sumber

Kethryweryn
sumber
4
Ini pasti berhasil. Jawaban di atas pasti tidak berhasil.
Mike
Tolong @Mike mengungkapkan apa yang benar: host all all all md5akan bekerja dengan baik Itu benar? ada masalah keamanan?
Peter Krauss
@ PeterKrauss Ya, tuan rumah semua semua md5 bekerja untuk saya. Masalah keamanan? Tentu saja, tetapi untuk apa yang saya lakukan itu baik-baik saja. (Jaringan internal)
Mike
3

Untuk pesan "server tidak mendengarkan", yang terjadi pada saya adalah, bahwa saya tidak menghapus # pada arsip postgresql.conf yang saya maksud:

# listen_addresses = 'localhost'

untuk:

listen_addresses = '*'

(Maaf untuk bahasa Inggris saya).

mrlinux
sumber
0

Jawaban dengan pilihan tertinggi dan yang diterima memiliki implikasi keamanan yang serius. Metode ini dinonaktifkan secara default karena alasan yang baik.

Lebih baik gunakan penerusan port lokal dengan ssh:

ssh -L local_port:localhost:foreign_port user@server

Mulai penerusan port:

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

(Ubah port lokal dan asing agar sesuai dengan konfigurasi Anda).

Kemudian Anda dapat langsung terhubung ke database dari komputer lokal Anda:

psql -U db_user -p local_port -l
pLumo
sumber