Ne, connection string ne može pokrenuti vaš VPN tunel
VPN posjeduje operativni sistem ili klijent, nikada drajver. Prvo podignite tunel, proslijedite domenske akreditive uz netonly, pa provjerite kružna putovanja kursora.
Programeri stalno traže mjesto gdje connection string, JDBC URL ili unos u tnsnames.ora bira VPN. Takvo mjesto ne postoji. Tunel uspostavlja operativni sistem ili klijent proizvođača koji registruje virtuelni adapter, a svaka biblioteka baze podataka iznad njega koristi sloj socketa koji iz toga proizlazi. Connection string imenuje host, port i akreditive, i to je cijeli rječnik.
Mit: connection string može odabrati tunel
Drajver otvara TCP socket prema hostu i portu. Nema API za podizanje tunela, nema polje za profil tunela i nema način da se autentifikuje na VPN gateway.
Zato se alati ponašaju identično kada ruta postoji. SSMS, DBeaver, Eclipse Data Tools i obični sqlcmd djeluju kao da je server na lokalnoj mreži, jer sa stanovišta socketa i jeste. Virtuelni adapter je učinio podmrežu baze dostupnom, a drajver nikada ne zna kako.
To objašnjava i zašto connection string ne može popraviti prekinut tunel. Kada veza umre, drajver prijavi timeout ili opštu mrežnu grešku, a aplikacijski kod koji to tretira kao problem upita zauvijek ponavlja pogrešan sloj.
Podignite tunel prije nego drajver krene
Povežite VPN na nivou operativnog sistema, prema uputama provajdera ili mrežnog tima, i tek onda otvorite alat. U praksi to znači da ruta do podmreže baze postoji prije nego drajver razriješi ime hosta.
Držite nadzor nad tunelom izvan aplikacije. PHP ili Java servis koji sam pokušava podići vezu upisuje ponašanje jednog provajdera u poslovni kod, i svaki failover postaje izdanje aplikacije. Nadzornik koji posjeduje tunel, prati ga i restartuje je odvojena stvar od puta upita.
Provjerite rutu prije nego okrivite drajver: ako host ne resolvuje ili port ne odgovara iz shella, nijedan connection string to neće promijeniti.
Mit: Windows greška autentifikacije znači da je ruta pokvarena
Windows autentifikacija preko VPN-a često pada s greškom koja izgleda kao mrežni kvar, a ruta je u redu. Kada račun pripada drugoj domeni i laptop joj se ne može pridružiti, pokrenite klijent s eksplicitnim akreditivima umjesto identiteta desktop sesije.
runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"/netonly prekidač čuva te akreditive samo za udaljenu autentifikaciju. Potvrdite šta je server zaista primio pomoću SELECT SUSER_SNAME(), umjesto da vjerujete dijalogu za vezu. Navodi se da spremanje akreditiva za adresu servera u Windows Credential Manager radi za SSMS, ali ne uvijek za servis koji radi pod drugim računom, pa provjerite koji identitet proces koristi prije nego promijenite prijavu.
Latencija pretvara serverski kursor u timeout
Serverski kursor traži od baze da drži rezultat i dohvata ga postupno, što jedan veliki rezultat pretvara u mnogo malih kružnih putovanja. Na LAN-u je to jeftino. Preko tunela s desetinama milisekundi dodatne latencije isti upit može preći timeout komande a da gotovo ne prenese podatke.
Prijeđite na klijentski kursor ili povećajte veličinu dohvata i grupirajte redove, i broj kružnih putovanja pada. Usko grlo je broj razmjena, ne nominalna brzina veze, pa će vas mjerenje propusnosti zavesti, dok mjerenje kružnih putovanja neće. Testirajte s najvećim skupom rezultata koji vaši korisnici zaista povlače, ne s upitom od jednog reda koji se vraća trenutno. Ako se timeout pomjera ali ne nestaje, povećajte timeout komande i veličinu dohvata zajedno i mjerite ponovo.
Ista aritmetika važi za brbljive ORM-ove i za svakog klijenta koji izdaje jednu naredbu po redu. Ako je plan upita dobar i prijenos mali, prebrojte mrežne razmjene prije nego podesite bazu.
Provjerite port, instancu i lokalni filter
Imenovana instanca sluša na dinamičkom portu, pa potvrdite port umjesto da pretpostavljate 1433. Na podrazumijevanoj instanci vrijednost se može pročitati iz registarske vrijednosti TcpPort pod ključem SuperSocketNetLib te instance. Za Oracle provjerite da se host u tnsnames.ora resolvuje, da adresa odgovara i da je port listenera dozvoljen; 1521 je uobičajeni podrazumijevani, ne garancija.
Zatim isključite vlastitu pristupnu listu tunela i, konačno, lokalni antivirus ili host firewall koji blokira vezu čak i kada su klijent i server na istoj mašini. Zabilježite fazu kvara prije nego promijenite konfiguraciju, jer razrješavanje imena, TCP dostupnost i TLS ili prijava svaki padaju s drugom porukom.
Upišite fazu u tiket. Inače će sljedeća osoba ponoviti istu potragu za connection stringom s koje je sve počelo.