Nosauktā SQL Server instance VPN: atklāšana, nevis ports 1433
Nosauktā instance pirms savienošanās pajautā SQL Browser portu. Ja vārds VPN neizdodas, bet tcp:host,port darbojas, trūkst atklāšanas.
Lielākā daļa cilvēku SQL Server resursdatora nosaukumu uzskata par pilnu adresi, bet VPN – par kaut ko, kas ir vai nu atļauts, vai nav. Praksē nosauktā instance liek klientam pēc DNS veikt otru meklēšanu, un tieši šo meklēšanu tunelis visbiežāk salauž. Skaidrs galapunkts no tās apiet, tāpēc tcp:host,port var darboties, kamēr host\INSTANCE beidzas ar taimautu. Atšķirība ir starp pakalpojuma atrašanu un atļauju to izmantot.
Mīts: viens resursdatora nosaukums nozīmē vienu portu
Resursdatora nosaukums tiek atrisināts adresē, un tur tā darbs beidzas. Nosauktā instance pievieno instances nosaukumu, kas serverim jāpārtulko TCP portā, un klients to nevar uzminēt. Ports 1433 ir noklusējuma instances noklusējums, nevis katras instances īpašība. Ja abus uzskata par vienu un to pašu, rodas klasiskais simptoms: ping darbojas, DNS darbojas, 1433 skenēšana neko neparāda, un secinājums ir, ka tīkls bloķē SQL.
Otrs pieņēmums neizdodas tāpat: ka TCP 1433 atvēršana ir pietiekama. Ja instance klausās citur, atvērts 1433 pierāda tikai to, ka tur ir kaut kas cits. Portam jāsakrīt ar klausītāju, un ka klausītājs ir servera puses konfigurācijas detaļa tas jājautā, nevis jāpieņem.
Ko klients patiešām dara ar nosaukto instanci
Pēc resursdatora atrisināšanas klients nosūta atklāšanas pieprasījumu SQL Server Browser pa UDP 1434 un jautā, kuru portu izmanto nosauktā instance. Pārlūka pakalpojums atbild no paša servera reģistra, un tad klients atver TCP savienojumu ar šo portu. Divi protokoli un divi porti ir iesaistīti, pirms vispār tiek mēģināta pieteikšanās.
nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser
Tāpēc tikai UDP bloķēšana rada taimautu, kas izskatās kā miris resursdators. Ja pārlūka pakalpojums ir apturēts vai atspējots, atklāšanas pieprasījums paliek neatbildēts, lai gan datubāzes dzinējs darbojas un tā TCP ports ir atvērts. Ja instance ir konfigurēta ar statisku portu, klients joprojām jautā, ja vien tam nav dots galapunkts tieši. Katra no šīm kļūdām lietojumprogrammas kļūdas ziņojumā izskatās vienādi, un tām nepieciešami atšķirīgi labojumi.
Pārlūka pakalpojums ir atklāšanas ērtība, nevis datubāze. Tā apturēšana neaptur dzinēju, un tā palaišana neatver instances TCP portu.
Kāpēc skaidrs galapunkts darbojas, kad nosaukums nedarbojas
Skaidrs galapunkts izņem meklēšanu no secības: klients savienojas tieši ar jūsu nosaukto adresi un portu. Tas vispirms ir diagnostika, nevis automātiski pastāvīgs risinājums, jo ports var mainīties, ja instance vēlāk tiek pārkonfigurēta uz dinamisku. Pirms secinājumu izdarīšanas salīdziniet abas formas ar to pašu klientu un to pašu kontu.
sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433
Ja skaidrā forma izdodas un nosauktā neizdodas, trūkst atklāšanas, un jūs varat izvēlēties, kā to aizvērt: atļaut UDP 1434 caur tuneli vai lūgt administratoram fiksēt statisku portu un dokumentēt galapunktu. Abi ir apzināti lēmumi ar atšķirīgām uzturēšanas izmaksām. Katra diapazona porta atvēršana nav ne viens, ne otrs, un tas ir variants, kas parasti tiek piedāvāts garas dienas beigās. Pierakstiet izvēli tur, kur dzīvo savienojuma virknes.
Ja neviena forma nedarbojas, problēma ir augstāk par atklāšanu. Pārbaudiet klausītāju, maršrutu un piekļuves noteikumu portam, ko instance faktiski izmanto, pirms vainojat pārlūka pakalpojumu.
Pēc atklāšanas: autentifikācija un identitāte ir atsevišķas
Pieteikšanās kļūda ir cits notikums nekā taimauts, un VPN identitāte tuneļa dēļ nekļūst par SQL pieteikšanos. Kad klients sasniedz pareizo portu, datubāzes dzinējs piemēro savu autentifikāciju un atļaujas. Abu posmu sajaukšana vienā biļetē ir veids, kā atklāšanas problēma tiek piešķirta nepareizajai komandai. Pirms kaut ko maināt, izlasiet kļūdas numuru.
Saglabājiet dokumentēto resursdatora nosaukumu, ja draiveris validē servera sertifikātu, jo savienošanās ar skaitlisku adresi var mainīt šo pārbaudi, nevis atrisināt sākotnējo problēmu. Jaunākie Microsoft draiveri pēc noklusējuma šifrē, tāpēc nosaukuma neatbilstība parādās kā sertifikāta kļūda pēc veiksmīga TCP savienojuma. Tas ir progress, nevis jauna kļūda.
Mīts, no kura jāatsakās, ir tas, ka SQL Server resursdatora nosaukums ir pilna adrese. Tas ir resursdators un, nosauktās instances gadījumā, meklēšana, ko tunelis var nepārnēsāt. Nosauciet portu, nosauciet atklāšanas ceļu, un nākamā kļūda pateiks, kuru slāni labot.