Blog JSystems - uwalniamy wiedzę!

Szukaj


Jak podłączyć się do PostgreSQL z innych hostów? Jak określić kto i skąd może się łączyć? Jak podpiąć się z użyciem PGAdmin4?















Z tego artykułu dowiesz się:

  • jak otworzyć nasłuch PostgreSQL na wszystkich lub wybranych kartach sieciowych,
  • jak zdefiniować zasady kto, skąd, do której bazy i z jakim uwierzytelnianiem może się podłączyć do klastra PostgreSQL,
  • jak wymusić połączenia z użyciem SSL,
  • jak podłączyć się do serwera PostgreSQL za pomocą podstawowego klienta – PgAdmin4,
  • jak uruchamiać zapytania w PgAdmin4



Dostęp do klastra z sieci


Właściwie nigdy nie powinniśmy wystawiać portu PostgreSQL na cały świat. Komputery, które łączą się do PostgreSQL po porcie 5432, powinny być w tej samej podsieci za NATem. Wystawiając port PostgreSQL na świat, narażamy się na niebezpieczeństwo ataku sieciowego.
Poniższa instrukcja zakłada otwarcie portu do nasłuchu sieciowego przy założeniu, że PostgreSQL stoi za NATem, a serwery do niego się łączące będą go widzieć w tej samej podsieci. Należy pamiętać o otwarciu portu na poziomie samego serwera/sieci - np. w Azure.


Domyślnie PostgreSQL słucha tylko na localhost (127.0.0.1). Aby dostęp do PostgreSQL był zapewniony z sieci, musimy zmienić parametr “listen_addresses”, dodać wpis do pg_hba.conf i zrestartować klaster.


W pierwszej kolejności z poziomu użytkownika systemowego postgres logujemy się do psql i zmieniamy parametr listen_addresses:


psql
alter system set listen_addresses='*';

Parametr “listen_addresses” określa adresy interfejsów sieciowych, na których ma słuchać. Możemy podać IP konkretnych kart sieciowych lub ustawić “*”, by słuchać na wszystkich interfejsach sieciowych.


Edytujemy teraz plik pg_hba.conf znajdujący się w PGDATA:


nano /data_pg/pg_hba.conf

Następnie wprowadzamy poniższą linię. W miejsce 0/0 (słuchanie dla wszystkich adresów) możemy wstawić swoją maskę podsieci:


host all all 0/0 scram-sha-256



Wyjaśnijmy, co oznaczają kolumny w tym pliku. Pierwsza kolumna (TYPE) dotyczy rodzaju połączenia. Mogą się tu pojawić następujące wartości:



  • local – dla połączeń lokalnych po sockecie Linuksa

  • host – dla połączeń po sieci przy użyciu TCP/IP. Dotyczy zarówno połączeń z użyciem SSL jak i bez niego. Analogicznie zarówno z użyciem szyfrowania GSSAPI i bez niego

  • hostssl – połączenia sieciowe TCP/IP z użyciem SSL

  • hostnossl – połączenie sieciowe TCP/IP bez użycia SSL

  • hostgssenc – tylko dla połączeń sieciowych TCP/IP z użyciem szyfrowania GSSAPI

  • hostnogssenc – tylko dla połączeń sieciowych TCP/IP bez użycia szyfrowania GSSAPI


Druga kolumna (DATABASE) dotyczy bazy danych. Możemy tu wskazać konkretną bazę, podając jej nazwę, wszystkie bazy wprowadzając „all” bądź na potrzeby replikacji wpisać „replication”.


Trzecia (USER) kolumna dotyczy użytkownika. Możemy wprowadzić nazwę jakiegoś konkretnego użytkownika lub „all” dla wszystkich. Jest tam też kilka innych opcji, ale raczej rzadko używanych, więc nie zostaną w tym miejscu omówione. Zainteresowani mogą skorzystać z:: https://www.postgresql.org/docs/15/auth-pg-hba-conf.html


Czwarta kolumna (ADDRESS) dotyczy adresu sieciowego lub zakresu adresów. Możemy tu wprowadzić adres jakiegoś konkretnego hosta bądź zakres adresów. Na przykład wpis dla mojego aktualnego adresu IP wyglądałby tak: „89.65.250.248/32”. Możemy też umożliwić dostęp z dowolnego hosta w internecie, wprowadzając „0/0” lub „all” albo wprowadzić „samehost” dla wszystkich adresów IP naszego serwera bądź „samenet” dla wszystkich hostów w tej samej podsieci co serwer. Zamiast adresów IP lub ich zakresów możemy w tym miejscu podać nazwę hosta. Wszystko, co nie jest adresem ip, zakresem tych adresów bądź specjalnym słowem kluczowym, będzie traktowane jako nazwa hosta.


Piąta kolumna (METHOD) dotyczy sposobu autoryzacji sesji do serwera. Tu również jest wiele opcji. Oto najczęściej używane.



  • trust – umożliwienie łączenia do klastra bez żadnej autoryzacji (!)

  • reject – odrzucenie połączenia. Dzięki temu możemy np. zbanować jakieś hosty

  • scram-sha-256 – używanie SCRAM-SHA-256 do autentykacji połączenia

  • md5 – używanie SCRAM-SHA-256 lub MD5 do autentykacji połączenia

  • password – (nie polecam) hasło do autentykacji jest przesyłane otwartym tekstem po sieci.


W pg_hba.conf liczy się pierwszy pasujący wpis. Jeśli żaden nie będzie pasował, następuje odrzucenie autoryzacji.


Ponieważ zmienialiśmy parametr “listen_addresess”, musimy zrestartować klaster. W przypadku zmiany tylko w pliku pg_hba.conf wystarczy przeładowanie konfiguracji za pomocą pg_reload_conf(). Przechodzimy do użytkownika z uprawnieniami do sudo i restartujemy usługę:


sudo systemctl restart postgresql-15

Po tej operacji możemy (z poziomu użytkownika systemowego postgres) podłączyć się po zewnętrznym adresie IP do klastra:


psql -U postgres -h 


Połączenie za pomocą PGAdmin4


Sprawdzamy teraz, czy konfiguracja działa. W tym celu instalujemy narzędzie pgAdmin4 na komputerze. Po jego uruchomieniu dodajemy połączenie do serwera, klikając PPM na „Servers” znajdujący się w prawym górnym rogu i wybierając najpierw „Register”, a następnie „Server”:



W zakładce General podajemy dowolną nazwę, jaką chcemy nadać temu połączeniu.



Przechodzimy do zakładki Connection i wprowadzamy adres IP serwera oraz hasło, które ustawiliśmy za pomocą “\password” w psql. Zaznaczamy też “save password”, by nie trzeba go było podawać za każdym razem.



Następnie zapisujemy połączenie. Na liście połączeń pokaże się nowo skonfigurowane połączenie. Aby przejść do konsoli SQL, rozwijamy swoje połączenie aż do bazy “postgres” i klikamy PPM. Z menu, które się wyświetli, wybieramy Query Tool.



W edytorze, który się pojawi, wprowadzamy:


select current_timestamp;

Należy uruchomić to polecenie, wciskając F5. Powinien być taki efekt:


Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...