จะเชื่อมต่อกับฐานข้อมูล PostgreSQL ระยะไกลบน Ubuntu โดยใช้ pgAdmin3 ได้อย่างไร


22

ฉันพยายามตั้งค่าฐานข้อมูล PostgreSQL บนเครื่อง Ubuntu ฉันต้องการเข้าถึงโดยใช้ pgAdmin3 จากเครื่องระยะไกล ฉันจะตั้งค่านี้ได้อย่างไร

ฉันได้ติดตั้งฐานข้อมูล PostgreSQL บน Ubuntu โดยใช้:

sudo apt-get install postgresql

ในฉัน/etc/postgresql/9.1/main/pg_hba.confมีฉันบรรทัดนี้:

host    all    all    all    password

ดังนั้นจึงควรยอมรับการเชื่อมต่อจากที่อยู่ IPv4 และรหัสผ่านทั้งหมดควรส่งเป็นข้อความที่ชัดเจน (นี่คือเหตุผลการพัฒนา)

ถ้าฉันใช้คำสั่งนี้เพื่อดูว่าบริการใดกำลังทำงานอยู่:

sudo netstat -tulpn

ฉันเห็นบรรทัดเหล่านี้ซึ่งแสดงว่า PostgreSQL ยอมรับการเชื่อมต่อบนพอร์ตเริ่มต้น:

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

เมื่อฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ PostgreSQL นี้จากคอมพิวเตอร์ระยะไกลในเครือข่ายท้องถิ่นเดียวกันฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

เซิร์ฟเวอร์ไม่ฟัง

เซิร์ฟเวอร์ไม่ยอมรับการเชื่อมต่อ: รายงานไลบรารีการเชื่อมต่อ

ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: การเชื่อมต่อถูกปฏิเสธเซิร์ฟเวอร์ทำงานบนโฮสต์ "10.0.1.7" และยอมรับการเชื่อมต่อ TCP / IP บนพอร์ต 5432 หรือไม่

ฉันใช้postgresเป็นชื่อผู้ใช้และไม่มีรหัสผ่าน แต่ฉันก็ลองด้วยpostgresรหัสผ่าน บนเซิร์ฟเวอร์ท้องถิ่นฉันสามารถเข้าสู่ระบบโดยใช้:

sudo -u postgres psql postgres

ฉันจะเชื่อมต่อกับฐานข้อมูล PostgreSQL ที่ทำงานบน Ubuntu จากเครื่องระยะไกลโดยใช้ pgAdmin3 ได้อย่างไร

คำตอบ:


25

บรรทัดในรายงาน netstat ของคุณแสดงว่าฐานข้อมูลกำลังรับฟังบน localhost: 5432 (127.0.0.1) สำหรับการเชื่อมต่อ tcp ขาเข้า

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

ดังนั้นจึงสามารถยอมรับการเชื่อมต่อ TCP ท้องถิ่นโดยไม่คำนึงถึงสิทธิ์ที่คุณระบุใน pg_hba.conf pg_hba.conf ระบุการเชื่อมต่อที่อนุญาตเท่านั้น แต่ไม่ได้ระบุว่าบริการของคุณจะรับฟังอินเตอร์เฟสใด

ที่อยู่ฟังเซิร์ฟเวอร์ที่ระบุไว้กับlisten_addresses GUC ใน postgresql.conf หากคุณต้องการให้เซิร์ฟเวอร์รับฟังการเชื่อมต่อระยะไกลคุณควรระบุ ip ที่คุณต้องการให้ฟังหรือ*ฟังบนอินเตอร์เฟสที่มีอยู่ทั้งหมดบนโฮสต์

หากต้องการให้เซิร์ฟเวอร์ postgresql ของคุณรับฟังบนอินเตอร์เฟสทั้งหมดบนโฮสต์คุณควรมีบรรทัดต่อไปนี้ใน postgresql.conf:

listen_addresses = '*'

แต่ฉันได้ระบุไว้แล้วallในpg_hba.confไฟล์ ... ดังนั้นจึงควรยอมรับ connetions จากที่อยู่ IP ทั้งหมด
Jonas

บางทีฉันอาจพูดอย่างชัดเจนยิ่งขึ้น pg_hba ไม่ได้ระบุว่าฐานข้อมูลรับฟังเฉพาะการเชื่อมต่อโปรโตคอล / db / user / remote-addr เท่านั้น
dbenhur

ตกลงฉันจะแก้ไขได้อย่างไร คุณมีข้อเสนอแนะใด?
Jonas

1
คุณแก้ไขได้โดยใส่บรรทัดlisten_addresses = '*'ใน postgresql.conf และรีสตาร์ทเซิร์ฟเวอร์ของคุณ
dbenhur

ขอบคุณสิ่งนี้แก้ปัญหานี้ได้แล้ว ตอนนี้ฉันเพิ่งมีปัญหากับรหัสผ่านเริ่มต้น :(
Jonas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.