Jak połączyć się ze zdalną bazą danych PostgreSQL na Ubuntu za pomocą pgAdmin3?

22

Próbuję skonfigurować bazę danych PostgreSQL na komputerze Ubuntu. Chciałbym mieć do niego dostęp za pomocą pgAdmin3 ze zdalnego komputera. Jak to skonfigurować?

Zainstalowałem bazę danych PostgreSQL na Ubuntu, używając:

sudo apt-get install postgresql

W moim /etc/postgresql/9.1/main/pg_hba.confja ten wiersz:

host    all    all    all    password

dlatego powinien akceptować połączenia ze wszystkich adresów IPv4, a hasła powinny być wysyłane zwykłym tekstem (z powodów programistycznych).

Jeśli uruchomię to polecenie, aby zobaczyć, jakie usługi są uruchomione:

sudo netstat -tulpn

Widzę te linie, co pokazuje, że PostgreSQL akceptuje połączenia na domyślnym porcie:

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

Gdy próbuję połączyć się z tym serwerem PostgreSQL ze zdalnego komputera w tej samej sieci lokalnej, pojawia się następujący komunikat o błędzie:

Serwer nie nasłuchuje

Serwer nie przyjmuje połączeń: raporty biblioteki połączeń

nie można połączyć się z serwerem: połączenie odrzucone Czy serwer działa na hoście „10.0.1.7” i akceptuje połączenia TCP / IP na porcie 5432?

Użyłem postgresjako nazwy użytkownika i hasła. Ale próbowałem też z postgreshasłem. Na serwerze lokalnym mogę się zalogować, używając:

sudo -u postgres psql postgres

Jak mogę połączyć się z bazą danych PostgreSQL działającą na Ubuntu ze zdalnego komputera za pomocą pgAdmin3?

Jonas
źródło

Odpowiedzi:

25

Wiersz w raporcie netstat pokazuje, że baza danych nasłuchuje tylko na localhost: 5432 (127.0.0.1) dla przychodzących połączeń 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

Dlatego może akceptować tylko lokalne połączenia TCP bez względu na uprawnienia określone w pliku pg_hba.conf. pg_hba.conf określa tylko dozwolone połączenia, ale nie określa interfejsów, których będzie nasłuchiwać twoja usługa.

Adresy, na których serwer nasłuchuje, są określone za pomocą GUC Listen_addresses w postgresql.conf . Jeśli chcesz, aby serwer nasłuchiwał połączeń zdalnych, powinieneś określić adresy IP, na których chcesz nasłuchiwać lub *nasłuchiwać na wszystkich dostępnych interfejsach hosta.

Aby twój serwer postgresql nasłuchiwał na wszystkich interfejsach na hoście, powinieneś mieć następujący wiersz w postgresql.conf:

listen_addresses = '*'
dbenhur
źródło
ale już określiłem allw pg_hba.confpliku ... więc powinien akceptować połączenia ze wszystkich adresów IP.
Jonas
Być może mógłbym to powiedzieć wyraźniej. pg_hba nie określa, na czym nasłuchuje baza danych, dozwolone są tylko połączenia protokół / db / użytkownik / zdalny adres.
dbenhur
Ok, więc jak to naprawić? Masz jakieś sugestie?
Jonas
1
naprawiasz to, umieszczając wiersz listen_addresses = '*'w postgresql.conf i ponownie uruchamiając serwer.
dbenhur
Dzięki, to rozwiązało ten problem. Teraz mam problemy z domyślnym hasłem :(
Jonas