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

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

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

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

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

Кренете го тунелот пред да се изврши драјверот

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

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

Проверете ја рутата пред да го обвините драјверот: ако домаќинот не се решава или портата не одговара од школката, ниту една низа за поврзување нема да го промени тоа.

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

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

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

Латенцијата го претвора курсорот на страната на серверот во истекување на времето

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

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

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

Проверете ја портата, примерокот и локалниот филтер

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

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

Запишете ја фазата во тикетот. Инаку следниот човек ќе го повтори истото пребарување на низата за поврзување со кое почна сè.

Поврзани статии