QGIS czyta każdą ścieżkę, do której docierają jego dostawcy danych, więc działający VPN to tylko połowa konfiguracji. Tunel daje pulpitowi trasę i politykę rozwiązywania nazw; projekt nadal potrzebuje punktu końcowego usługi, protokołu dostawcy i poświadczeń, które usługa przyjmie. To trzy osobne pola, a wpisanie publicznego listenera VPN w pole bazy danych nie jest żadnym z nich. Ten przewodnik śledzi jedną warstwę PostGIS od formularza QGIS do zwróconego wiersza i nazywa granicę, którą dowodzi każdy krok.

Zacznij od warstwy, nie od VPN

Każdy typ warstwy osiąga inny rodzaj punktu końcowego. Warstwa PostGIS otwiera połączenie PostgreSQL z hostem, portem, bazą danych i rolą. Warstwa WMS lub WFS pobiera URL usługi, a następnie analizuje dokument możliwości. Plik shapefile w udziale sieciowym wymaga tylko ścieżki pliku, którą system operacyjny może otworzyć. Ponieważ to trzy różne mechanizmy, pusty projekt nic nie mówi, dopóki nie wiesz, który z nich debugujesz.

Zapytaj operatora GIS o punkt końcowy, port, wymaganą tożsamość i politykę dostępu obowiązującą dla Twojego konta. Zachowaj nazwę hosta usługi dokładnie taką, jaka została wydana, gdy wdrożenie zależy od prywatnego DNS lub od kontroli nazwy w certyfikacie. Ponowne użycie adresu hosta skopiowanego z zapisanego połączenia innego użytkownika to najszybsza droga do maszyny, która odpowiada, ale ma starszą bazę danych.

Trasy, dozwolone zasoby i rozwiązywanie nazw należą do tego, kto zarządza VPN. Formularz źródła danych nie może zainstalować trasy, której profil tunelu nigdy nie wysłał, ani rozszerzyć polityki bramy. Gdy host się rozwiązuje, a port odpowiada, strona sieciowa problemu jest zakończona.

Wpisz prywatny punkt końcowy wydany przez operatora

Formularz PostgreSQL w QGIS odzwierciedla pola oczekiwane przez libpq, więc wypełnij go w tej samej kolejności, w jakiej zrobiłoby to połączenie z wiersza poleceń. Usługa i host biorą maszynę bazy danych, port bierze listener, który serwer faktycznie otwiera, a baza danych bierze konkretny katalog zamiast wartości domyślnej serwera. Przechowuj hasło w konfiguracji uwierzytelniania, a nie w pliku projektu, aby udostępniony projekt nie niósł poświadczeń.

Oddziel obie nazwy, zanim cokolwiek wpiszesz. Nazwa bramy należy do klienta VPN, a nazwa bazy danych do QGIS, i rzadko są tym samym hostem.

VPN gateway:   vpn.gis.lab.example       (profile only, not a data source)
Database host: db.gis.lab.example:5432   (PostGIS service)
Database name: gis_prod
TLS mode:      verify-full

Jeśli baza danych znajduje się na innej maszynie za bramą, nazwa w formularzu musi być tą maszyną. To prywatny DNS przez tunel sprawia, że nazwa działa, a projekt, który rozwiązuje się tylko podczas połączenia, zachowuje się poprawnie, a nie źle keszuje.

Trzymaj tryb TLS bazy danych oddzielnie od tunelu

SSL w nazwie produktu VPN opisuje tunel, nie sesję bazy danych. QGIS przekazuje tryb SSL PostgreSQL do libpq, a ten tryb steruje tym, czy klient weryfikuje certyfikat serwera i czy sprawdza zawartą w nim nazwę hosta. verify-fullrobi jedno i drugie, dlatego to tryb, który warto zachować, gdy certyfikat zawiera nazwę usługi.

Obniżenie trybu do disable ponieważ tunel jest już szyfrowany usuwa sprawdzenie, że serwer, do którego dotarłeś, jest serwerem, o który prosiłeś. Gdy weryfikacja zawodzi, zwykle przyczyną jest niezgodność nazw lub brak certyfikatu głównego, a oba można naprawić bez osłabiania połączenia. Skieruj sslrootcert na CA publikowany przez operatora i zachowaj nazwę hosta w formularzu identyczną z nazwą w certyfikacie.

Tunel z prywatną trasą i baza danych z ważnym certyfikatem nadal mogą zawieść na roli. Poświadczenia aplikacji są oddzielone od poświadczeń VPN, a konto uwierzytelniane na bramie nie ma żadnych domniemanych uprawnień w PostgreSQL.

Testuj każdą granicę po kolei i czytaj pierwszy błąd

Pracuj od klienta na zewnątrz w stałej kolejności: rozwiązywanie nazw, osiągalność TCP, TLS, uwierzytelnianie, a potem samo zapytanie. Pierwszy nieudany krok to jedyny, o którym warto raportować, a przeskakiwanie naprzód daje komunikaty błędów z granicy, do której jeszcze nie dotarłeś. Cztery polecenia obejmują pierwsze cztery kroki.

getent hosts db.gis.lab.example
nc -vz db.gis.lab.example 5432
psql "host=db.gis.lab.example port=5432 dbname=gis_prod sslmode=verify-full" -c 'select 1'
curl -sS 'https://wms.gis.lab.example/ows?service=WMS&request=GetCapabilities' | head -c 200

Pusta odpowiedź z getent to problem rozwiązywania nazw, nie problem bazy danych. Odrzucony lub wygasły nc oznacza, że brakuje trasy lub reguły firewalla, co jest poprawką po stronie bramy. Błąd TLS z psql oznacza, że certyfikat lub nazwa są błędne, natomiast password authentication failed oznacza, że dotarłeś do PostgreSQL i problemem są poświadczenia. Dla warstwy WMS wywołanie curl zwraca XML możliwości, który QGIS by przeanalizował, więc strona logowania HTML w tym wyjściu od razu wyjaśnia pustą warstwę.

Błąd PostgreSQL to dobra wiadomość w porównaniu z przekroczeniem czasu. Dowodzi, że cel odpowiedział, co przenosi zgłoszenie od zespołu sieci do administratora bazy danych lub GIS. Zachowanie tego rozróżnienia w raporcie oszczędza jedną rundę.

Gdy projekt otwiera się z pustymi warstwami

W QGIS sprawdź zapisane źródło warstwy, zanim cokolwiek wprowadzisz ponownie. Właściwości warstwy pokazują dokładny ciąg połączenia zapisany przez projekt, a zduplikowany wpis połączenia ze starszym hostem to częsta pozostałość po poprzedniej sieci biurowej. Ponowne wczytanie projektu po naprawie połączenia nie zawsze odczytuje dostawcę od nowa, więc usuń warstwę i dodaj ją ponownie z poprawionego połączenia.

Następnie potwierdź, że konfiguracja uwierzytelniania to ta dołączona do warstwy, a nie tylko obecna na liście. Warstwa zapisana z inną konfiguracją uwierzytelniania zawodzi cicho w panelu przeglądarki, podczas gdy osobny test psql przechodzi.

Gdy warstwa się wczyta, zapisz projekt ze ścieżkami względnymi tylko dla plików i trzymaj połączenia usług nazwane według ich punktu końcowego. Następna osoba, która odziedziczy projekt, może wtedy powiedzieć, jakiego hosta oczekiwała zepsuta warstwa, bez otwierania zgłoszenia.

Powiązane artykuły