Програмери и даље траже место где ниска везе, JDBC URL или запис у tnsnames.ora бира VPN. Такво место не постоји. Тунел успоставља оперативни систем или клијент добављача који региструје виртуелни адаптер, а свака библиотека базе података изнад њега користи слој сокета који из тога произилази. Ниска везе именује host, port и акредитив, и то је цео речник.

Мит: ниска везе може да изабере тунел

Драјвер отвара TCP сокет ка host-у и порту. Нема API за подизање тунела, нема поље за профил тунела и нема начин да се аутентификује на VPN gateway.

Зато се алати понашају исто када рута постоји. SSMS, DBeaver, Eclipse Data Tools и обичан sqlcmd понашају се као да је сервер на локалној мрежи, јер са становишта сокета и јесте. Виртуелни адаптер је учинио подмрежу базе доступном, а драјвер никада не зна како.

То објашњава и зашто ниска везе не може да поправи прекинут тунел. Када веза умре, драјвер пријављује timeout или општу мрежну грешку, а код апликације који то третира као проблем упита заувек понавља погрешан слој.

Подигните тунел пре него што драјвер крене

Повежите VPN на нивоу оперативног система, према упутствима добављача или мрежног тима, и тек онда отворите алат. У пракси то значи да рута до подмреже базе постоји пре него што драјвер разреши име host-а.

Држите надзор над тунелом изван апликације. PHP или Java сервис који сам покушава да подигне везу уграђује понашање једног добављача у пословни код, и сваки failover постаје издање апликације. Надзорник који поседује тунел, прати га и рестартује је одвојена ствар од пута упита.

Проверите руту пре него што окривите драјвер: ако се host не разрешава или port не одговара из љуске, ниједна ниска везе то неће променити.

Мит: Windows грешка аутентификације значи да је рута покварена

Windows аутентификација преко VPN-а често пада са грешком која изгледа као мрежни квар, а рута је у реду. Када рачун припада другој домени и лаптоп не може да јој се придружи, покрените клијент са експлицитним акредитивима уместо идентитета desktop сесије.

runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"

/netonly прекидач чува те акредитиве само за удаљену аутентификацију. Потврдите шта је сервер заиста примио помоћу SELECT SUSER_SNAME(), уместо да верујете дијалогу везе. Наводи се да чување акредитива за адресу сервера у Windows Credential Manager ради за SSMS, али не увек за сервис који ради под другим рачуном, па проверите који идентитет процес користи пре него што промените пријаву.

Латенција претвара курсор на страни сервера у timeout

Курсор на страни сервера тражи од базе да држи резултат и да га дохвата постепено, што један велики резултат претвара у много малих кружних путовања. На LAN-у је то јефтино. Преко тунела са десетинама милисекунди додатне латенције исти упит може да премаши timeout команде, а да готово ништа не пренесе.

Пређите на курсор на страни клијента или повећајте величину дохвата и групишите редове, и број кружних путовања пада. Уско грло је број размена, не номинална брзина везе, па ће вас мерење пропусности завести, док мерење кружних путовања неће. Тестирајте са највећим скупом резултата који ваши корисници заиста вуку, не са упитом од једног реда који се враћа тренутно. Ако се timeout помера али не нестаје, повећајте заједно timeout команде и величину дохвата и мерите поново.

Иста аритметика важи за причљиве ORM-ове и за сваког клијента који издаје једну наредбу по реду. Ако је план упита добар и пренос мали, пребројте мрежне размене пре него што подесите базу.

Проверите port, инстанцу и локални филтер

Именована инстанца слуша на динамичком порту, па потврдите port уместо да претпостављате 1433. На подразумеваној инстанци вредност се може прочитати из регистарске вредности TcpPort под кључем SuperSocketNetLib те инстанце. За Oracle проверите да се host у tnsnames.ora разрешава, да адреса одговара и да је port listener-а дозвољен; 1521 је уобичајена подразумевана вредност, не гаранција.

Затим искључите сопствену листу дозвола тунела и, на крају, локални антивирус или host firewall који блокира везу чак и када су клијент и сервер на истом рачунару. Забележите фазу која пада пре него што промените конфигурацију, јер разрешавање имена, TCP доступност и TLS или пријава сваки падају са другом поруком.

Упишите фазу у тикет. Иначе ће следећа особа поновити исту потрагу за ниском везе са које је све почело.

Повезани чланци