Именована инстанца SQL Server-а преко VPN-а: откривање, не порт 1433
Именована инстанца пита SQL Browser за порт пре повезивања. Ако име не пролази кроз VPN, а tcp:host,port ради, проблем је у откривању.
Већина људи третира име хоста SQL Server-а као потпуну адресу, а VPN као нешто што је или дозвољено или није. У пракси именована инстанца тера клијента да после DNS-а обави друго тражење, а управо то тражење тунел најчешће квари. Експлицитна крајња тачка то заобилази, зато tcp:host,port може да ради док host\INSTANCE истиче. Разлика је између проналажења услуге и добијања дозволе да је користите.
Мит: једно име хоста значи један порт
Име хоста се разрешава у адресу и ту његов посао завршава. Именована инстанца додаје име инстанце које сервер мора да преведе у TCP порт, а клијент га не може погодити. Порт 1433 је подразумевани за подразумевану инстанцу, а не својство сваке инстанце на машини. Ако обоје третирамо као исту ствар, добијамо класичан симптом: ping ради, DNS ради, скенирање 1433 не показује ништа, а закључак је да мрежа блокира SQL.
Друга претпоставка пада на исти начин: да је отварање TCP 1433 довољно. Ако инстанца слуша негде другде, отворен 1433 доказује само да је тамо нешто друго. Порт мора да се подудара са слушаоцем, а да је слушалац детаљ конфигурације на страни сервера то треба питати уместо претпостављати.
Шта клијент заправо ради са именованом инстанцом
Након разрешавања хоста клијент шаље захтев за откривање SQL Server Browser-у на UDP 1434 и пита који порт именована инстанца користи. Услуга претраживача одговара из сопственог регистра сервера, а клијент затим отвара TCP везу према том порту. Два протокола и два порта учествују пре него што се уопште покуша пријава.
nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser
Зато блокирање само UDP-а производи истек који изгледа као мртав хост. Ако је услуга претраживача заустављена или онемогућена, захтев за откривање остаје без одговора иако мотор базе података ради и његов TCP порт је отворен. Ако је инстанца конфигурисана са статичким портом, клијент ипак пита осим ако му крајња тачка није дата директно. Сваки од тих кварова изгледа идентично у поруци о грешци апликације, а потребне су различите поправке.
Услуга претраживача је погодност за откривање, не база података. Њено заустављање не зауставља мотор, а њено покретање не отвара TCP порт инстанце.
Зашто експлицитна крајња тачка ради када име не ради
Експлицитна крајња тачка уклања тражење из следа: клијент се повезује равно на адресу и порт које сте навели. То је најпре дијагностика, а не аутоматски трајна поправка, јер се порт може променити ако се инстанца касније преконфигурише на динамички. Упоредите оба облика са истим клијентом и истим налогом пре него што донесете закључке.
sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433
Ако експлицитни облик успе, а именовани не, откривање је празнина и можете да изаберете како ћете је затворити: дозволите UDP 1434 кроз тунел, или замолите администратора да причврсти статички порт и документује крајњу тачку. Обоје су намерне одлуке са различитим трошковима одржавања. Отварање сваког порта у опсегу није ни једно од тога и то је опција која се обично предлаже на крају дугог дана. Запишите избор тамо где живе стрингови везе.
Ако ниједан облик не ради, проблем је узводно од откривања. Проверите слушаоца, руту и правило приступа за порт који инстанца заиста користи пре него што окривите услугу претраживача.
Након откривања: аутентификација и идентитет су одвојени
Неуспешна пријава је другачији догађај од истека, а VPN идентитет не постаје SQL пријава захваљујући тунелу. Када клијент стигне до правог порта, мотор базе података примењује сопствену аутентификацију и дозволе. Мешање две фазе у једном тикету је начин на који проблем откривања заврши код погрешног тима. Прочитајте број грешке пре него што било шта промените.
Задржите документовано име хоста ако драјвер проверава сертификат сервера, јер повезивање преко нумеричке адресе може да промени ту проверу уместо да реши изворни проблем. Новији Microsoft драјвери шифрирају подразумевано, па се неспагање имена појављује као грешка сертификата после успешне TCP везе. То је напредак, а не нови квар.
Мит који треба напустити је да је име хоста SQL Server-а потпуна адреса. То је хост плус, за именовану инстанцу, тражење које тунел можда не преноси. Именујте порт, именујте пут откривања, и следећи квар ће вам рећи који слој поправити.