Imenovana instanca SQL Servera preko VPN-a: otkrivanje, ne port 1433
Imenovana instanca pita SQL Browser za port prije povezivanja. Ako ime ne prolazi kroz VPN, a tcp:host,port radi, problem je u otkrivanju.
Većina ljudi tretira ime hosta SQL Servera kao potpunu adresu, a VPN kao nešto što je ili dozvoljeno ili nije. U praksi imenovana instanca tjera klijenta da nakon DNS-a obavi drugo traženje, a upravo to traženje tunel najčešće kvari. Eksplicitna krajnja točka to zaobilazi, zato tcp:host,port može raditi dok host\INSTANCE ističe. Razlika je između pronalaženja usluge i dobijanja dozvole da je koristite.
Mit: jedno ime hosta znači jedan port
Ime hosta se razrješava u adresu i tu njegov posao završava. Imenovana instanca dodaje ime instance koje server mora prevesti u TCP port, a klijent ga ne može pogoditi. Port 1433 je zadani za zadanu instancu, a ne svojstvo svake instance na mašini. Ako oboje tretiramo kao istu stvar, dobijamo klasičan simptom: ping radi, DNS radi, skeniranje 1433 ne pokazuje ništa, a zaključak je da mreža blokira SQL.
Druga pretpostavka pada na isti način: da je otvaranje TCP 1433 dovoljno. Ako instanca sluša negdje drugdje, otvoren 1433 dokazuje samo da je tamo nešto drugo. Port se mora podudarati sa slušaocem, a da je slušalac detalj konfiguracije na strani servera, to treba pitati umjesto pretpostavljati.
Šta klijent zapravo radi s imenovanom instancom
Nakon razrješavanja hosta klijent šalje zahtjev za otkrivanje SQL Server Browseru na UDP 1434 i pita koji port imenovana instanca koristi. Usluga pretraživača odgovara iz vlastitog registra servera, a klijent zatim otvara TCP vezu prema tom portu. Dva protokola i dva porta sudjeluju prije nego što se uopće pokuša prijava.
nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser
Zato blokada samo UDP-a proizvodi istek koji izgleda kao mrtav host. Ako je usluga pretraživača zaustavljena ili onemogućena, zahtjev za otkrivanje ostaje bez odgovora iako motor baze podataka radi i njegov TCP port je otvoren. Ako je instanca konfigurisana sa statičkim portom, klijent ipak pita osim ako mu krajnja točka nije data direktno. Svaki od tih kvarova izgleda identično u poruci o grešci aplikacije, a potrebne su različite popravke.
Usluga pretraživača je pogodnost za otkrivanje, ne baza podataka. Njeno zaustavljanje ne zaustavlja motor, a njeno pokretanje ne otvara TCP port instance.
Zašto eksplicitna krajnja točka radi kad ime ne radi
Eksplicitna krajnja točka uklanja traženje iz slijeda: klijent se povezuje ravno na adresu i port koje ste naveli. To je najprije dijagnostika, a ne automatski trajna popravka, jer se port može promijeniti ako se instanca kasnije prekonfiguriše na dinamički. Uporedite oba oblika s istim klijentom i istim računom prije nego donesete zaključke.
sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433
Ako eksplicitni oblik uspije, a imenovani ne, otkrivanje je praznina i možete odabrati kako je zatvoriti: dozvoliti UDP 1434 kroz tunel, ili zamoliti administratora da prikuje statički port i dokumentuje krajnju točku. Oboje su namjerne odluke s različitim troškovima održavanja. Otvaranje svakog porta u rasponu nije ni jedno od toga i to je opcija koja se obično predlaže na kraju dugog dana. Zapišite izbor tamo gdje žive stringovi veze.
Ako nijedan oblik ne radi, problem je uzvodno od otkrivanja. Provjerite slušaoca, rutu i pravilo pristupa za port koji instanca zapravo koristi prije nego okrivite uslugu pretraživača.
Nakon otkrivanja: autentifikacija i identitet su odvojeni
Neuspjeh prijave je drugačiji događaj od isteka, a VPN identitet ne postaje SQL prijava zahvaljujući tunelu. Kad klijent stigne do pravog porta, motor baze podataka primjenjuje vlastitu autentifikaciju i dozvole. Miješanje dvije faze u jednom tiketu je način na koji problem otkrivanja završi kod pogrešnog tima. Pročitajte broj greške prije nego bilo šta promijenite.
Zadržite dokumentirano ime hosta ako upravljački program provjerava certifikat servera, jer povezivanje preko numeričke adrese može promijeniti tu provjeru umjesto da riješi izvorni problem. Noviji Microsoftovi upravljački programi šifriraju po zadanom, pa se nepodudaranje imena pojavljuje kao greška certifikata nakon uspješne TCP veze. To je napredak, a ne novi kvar.
Mit koji treba napustiti je da je ime hosta SQL Servera potpuna adresa. To je host plus, za imenovanu instancu, traženje koje tunel možda ne prenosi. Imenujte port, imenujte put otkrivanja, i sljedeći kvar će vam reći koji sloj popraviti.