Zdalny dostęp do bazy danych postgresql

46

Potrzebuję dostępu do bazy danych postgresql ze zdalnego komputera na VPS w DigitalOcean z systemem 12.10 i postgresql 9.1.

Jak mam to zrobic? Zauważyłem, że port 5432 jest zamknięty. Jak mogę to otworzyć?

Øyvind
źródło
1
Postępuj zgodnie z krokami wymienionymi w javabypatel.blogspot.in/2015/07/... i zmień numer portu obecny w pliku postgresql.conf. po zmianie portu zrestartuj serwer PostgreSQL.
Jayesh
Url opublikowany przez @Jayesh załatwił sprawę. Postępowałem zgodnie z instrukcjami i udało mi się połączyć jeden z moich komputerów programistycznych z innym (od Windows z pgAdmin4 do Ubuntu 18.04 postgresql 10.9)
EAmez

Odpowiedzi:

78

Aby otworzyć port 5432, edytuj /etc/postgresql/9.1/main/postgresql.confi zmień

listen_addresses='localhost'

do

listen_addresses='*'

i ponownie uruchom DBMS

invoke-rc.d postgresql restart

teraz możesz się połączyć

$ psql -h hostname -U username -d database

jeśli nie możesz się uwierzytelnić, musisz dać swojemu użytkownikowi prawa dostępu do bazy danych

Edytuj swój

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

i dodaj

host all all all md5

(Ma to na celu szeroko otwarty dostęp. W celu ściślejszej kontroli zapoznaj się z dokumentacją pg_hba.conf i dostosuj ją zgodnie z potrzebami).

Odtąd potrzebujesz również przeładowania

invoke-rc.d postgresql reload

Nie muszę wspominać, że jest to podstawowa konfiguracja, teraz powinieneś pomyśleć o modyfikacji zapory ogniowej i poprawie bezpieczeństwa DBMS.

Daniel Vérité
źródło
4
W szczególności należy włączyć protokół SSL.
Craig Ringer
Okej, próbowałem tego, ale kiedy próbuję połączyć się za pomocą pgAdmin z mojego komputera, pojawia się komunikat „Serwer nie nasłuchuje”. Dodałem do iptables, a kiedy uruchamiam iptables -L, pokazuje: AKCEPTUJ tcp - w dowolnym miejscu tcp dpt: postgresql Podczas sprawdzania adresu IP i PORT na tej stronie ( yougetsignal.com/tools/open-ports ), napisane jest: port jest zamknięty
Øyvind
2
czy serwer nasłuchuje? netstat -nlt|grep :5432
1
host <database> <user> <remote_client_IPaddress>/24 md5
Wstawiłbym
W przypadku wersji Postgresql 9.5 może być konieczne zrestartowanie serwera, zanim zaczną obowiązywać adresy nasłuchiwania.
Heather92065
26

To już nie działa, jeśli kiedykolwiek:

hostuj wszystko * md5

Prawidłowe możliwe wiersze to:

hostuj wszystkie 0,0.0.0/0 md5 # ipv4

hostuj wszystko :: zakres 0/0 md5 # ipv6

hostuj wszystkie wszystkie md5 # all ip

Źródło

Kethryweryn
źródło
4
To zdecydowanie załatwiło sprawę. Powyższa odpowiedź zdecydowanie nie zadziałała.
Mike
Proszę @Mike wyrazić, co jest poprawne: czy host all all all md5będzie dobrze? Jest poprawna? jakiś problem z bezpieczeństwem?
Peter Krauss,
@peterkrauss Tak, hostuj wszystko, co dla mnie działa md5. Problem bezpieczeństwa? Oczywiście, że tak, ale to, co robiłem, było w porządku. (Sieć wewnętrzna)
Mike
3

Dla wiadomości „serwer nie nasłuchuje” przydarzyło mi się, że nie usuwam # w archiwum postgresql.conf, co mam na myśli:

# listen_addresses = 'localhost'

do:

listen_addresses = '*'

(Przepraszam za mój angielski).

mrlinux
źródło
0

Najwyżej głosowana i zaakceptowana odpowiedź ma poważne domniemania bezpieczeństwa. Ta metoda jest domyślnie wyłączona z ważnych powodów.

Lepsze wykorzystanie przekierowania portów lokalnych dzięki ssh:

ssh -L local_port:localhost:foreign_port user@server

Rozpocznij przekierowywanie portów:

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

(Zmień porty lokalne i zagraniczne w celu dopasowania do konfiguracji).

Następnie możesz bezpośrednio połączyć się z bazą danych z komputera lokalnego:

psql -U db_user -p local_port -l
pLumo
źródło