เข้าถึงฐานข้อมูล postgresql จากระยะไกล


46

ฉันต้องการเข้าถึงฐานข้อมูล postgresql จากเครื่องระยะไกลบน VPS ที่ DigitalOcean ทำงาน 12.10 และ postgresql 9.1

ฉันจะทำสิ่งนี้ได้อย่างไร ฉันสังเกตว่าพอร์ต 5432 ปิดฉันจะเปิดได้อย่างไร


1
ทำตามขั้นตอนที่กล่าวถึงในjavabypatel.blogspot.in/2015/07/ …และเปลี่ยนหมายเลขพอร์ตที่มีอยู่ในไฟล์ postgresql.conf หลังจากเปลี่ยนพอร์ตรีสตาร์ทเซิร์ฟเวอร์ PostgreSQL
Jayesh

Url โพสต์โดย @Jayesh ทำเคล็ดลับแล้ว ปฏิบัติตามคำแนะนำและทำให้สำเร็จเป็นหนึ่งในคอมพิวเตอร์ที่พัฒนาของฉันเชื่อมต่อกับอีกเครื่องหนึ่ง (จาก Windows ที่มี pgAdmin4 ไปยัง Ubuntu 18.04 postgresql 10.9)
EAmez

คำตอบ:


78

หากต้องการเปิดพอร์ต 5432 ให้แก้ไข/etc/postgresql/9.1/main/postgresql.confและเปลี่ยน

listen_addresses='localhost'

ไปยัง

listen_addresses='*'

และรีสตาร์ท DBMS ของคุณ

invoke-rc.d postgresql restart

ตอนนี้คุณสามารถเชื่อมต่อกับ

$ psql -h hostname -U username -d database

หากคุณไม่สามารถพิสูจน์ตัวเองได้คุณต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้ในฐานข้อมูลของคุณ

แก้ไขของคุณ

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

และเพิ่ม

host all all all md5

(นี่เป็นการเปิดกว้างสำหรับการควบคุมที่เข้มงวดศึกษาเอกสาร pg_hba.confและปรับตามความต้องการของคุณ)

หลังจากนี้คุณจะต้องโหลดซ้ำอีกครั้ง

invoke-rc.d postgresql reload

ฉันไม่จำเป็นต้องพูดถึงว่านี่เป็นการกำหนดค่าพื้นฐานตอนนี้คุณควรคิดถึงการปรับเปลี่ยนไฟร์วอลล์ของคุณและปรับปรุงความปลอดภัยของ DBMS ของคุณ


4
โดยเฉพาะอย่างยิ่งคุณควรเปิดใช้งาน SSL
Craig Ringer

Okey ฉันลองสิ่งนี้ แต่เมื่อฉันพยายามเชื่อมต่อโดยใช้ pgAdmin จากคอมพิวเตอร์ของฉันฉันจะได้รับ "เซิร์ฟเวอร์ไม่ฟัง" ฉันเพิ่มลงใน iptables และเมื่อฉันเรียกใช้ iptables -L รายการต่อไปนี้: ACCEPT tcp - ที่ใดก็ได้ tcp dpt: postgresql เมื่อตรวจสอบ IP และพอร์ตบนเว็บไซต์นี้ ( yougetsignal.com/tools/open-ports ) มันบอกว่า ปิดพอร์ต
Øyvind

2
เซิร์ฟเวอร์กำลังฟังอะไร ตรวจสอบกับnetstat -nlt|grep :5432

1
ฉันจะแทรกแถวโฮสต์ในทางที่เข้มงวดมากขึ้น:host <database> <user> <remote_client_IPaddress>/24 md5
gc5

สำหรับ Postgresql เวอร์ชั่น 9.5 คุณอาจต้องรีสตาร์ทเซิร์ฟเวอร์ก่อนที่ Listen_addresses จะมีผล
Heather92065

26

สิ่งนี้ไม่สามารถใช้งานได้อีกต่อไปหากเคย:

โฮสต์ทั้งหมด * md5

บรรทัดที่เป็นไปได้ที่ถูกต้องสำหรับสิ่งนี้คือ:

โฮสต์ทุกช่วง 0.0.0.0/0 md5 # ipv4

โฮสต์ทั้งหมด :: 0/0 md5 # ช่วง ipv6

โฮสต์ทั้งหมดทั้งหมด md5 #all ip

แหล่ง


4
นี่เป็นกลอุบายอย่างแน่นอน คำตอบข้างต้นไม่ได้ผลแน่นอน
ไมค์

กรุณา @ ไมค์แสดงความถูกต้อง: host all all all md5จะทำงานได้ดี? ถูกต้อง? ปัญหาความปลอดภัยใด ๆ
Peter Krauss

@ peterkrauss ใช่โฮสต์ทั้งหมด md5 ทั้งหมดทำงานให้ฉัน ปัญหาความปลอดภัย? แน่นอนมันเป็น แต่สำหรับสิ่งที่ฉันทำมันก็ไม่เป็นไร (เครือข่ายภายใน)
ไมค์

3

สำหรับข้อความ "เซิร์ฟเวอร์ไม่ฟัง" ที่เกิดขึ้นกับฉันคือฉันไม่ลบ # ในไฟล์เก็บถาวร postgresql.conf ฉันหมายถึง:

# listen_addresses = 'localhost'

ไปที่:

listen_addresses = '*'

(ขออภัยสำหรับภาษาอังกฤษของฉัน)


0

คำตอบที่ได้รับการโหวตสูงสุดและเป็นที่ยอมรับนั้นมีความปลอดภัยอย่างมาก วิธีนี้ถูกปิดใช้งานโดยค่าเริ่มต้นด้วยเหตุผลที่ดี

ใช้การส่งต่อพอร์ตบนเครื่องด้วยssh:

ssh -L local_port:localhost:foreign_port user@server

เริ่มการส่งต่อพอร์ต:

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

(เปลี่ยนพอร์ตในประเทศและต่างประเทศให้เหมาะสมกับการกำหนดค่าของคุณ)

จากนั้นคุณสามารถเชื่อมต่อกับฐานข้อมูลโดยตรงจากคอมพิวเตอร์ของคุณ:

psql -U db_user -p local_port -l
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.