Именувана инстанца на 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 е целосна адреса. Тоа е домаќин плус, за именувана инстанца, пребарување што тунелот може да не го пренесе. Наведете ја портата, наведете ја патеката на откривање, и следната грешка ќе ви каже кој слој да го поправите.