Razvijalci še vedno iščejo mesto, kjer povezovalni niz, naslov JDBC ali vnos v tnsnames.ora izbere VPN. Takega mesta ni. Tunel vzpostavi operacijski sistem ali odjemalec ponudnika, ki registrira navidezni vmesnik, in vsaka knjižnica za baze podatkov nad njim uporablja nastalo plast vtičnic. Povezovalni niz poimenuje gostitelja, vrata in poverilnice, in to je celoten slovar.

Mit: povezovalni niz lahko izbere tunel

Gonilnik odpre vtičnico TCP do gostitelja in vrat. Nima API-ja za dvig tunela, nima polja za profil tunela in nima načina za preverjanje pristnosti pri prehodu VPN.

Zato se orodja obnašajo enako, ko pot obstaja. SSMS, DBeaver, Eclipse Data Tools in običajen sqlcmd delujejo, kot da je strežnik v lokalnem omrežju, ker je z vidika vtičnice res tam. Navidezni vmesnik je naredil podomrežje baze podatkov dosegljivo, gonilnik pa nikoli ne ve, kako.

To pojasni tudi, zakaj povezovalni niz ne more popraviti padlega tunela. Ko povezava umre, gonilnik sporoči časovno prekoračitev ali splošno omrežno napako, koda aplikacije, ki to obravnava kot težavo poizvedbe, pa v nedogled ponavlja napačno plast.

Dvignite tunel, preden se gonilnik zažene

Povežite VPN na ravni operacijskega sistema, po navodilih ponudnika ali omrežne ekipe, in šele nato odprite orodje. V praksi to pomeni, da pot v podomrežje baze podatkov obstaja, preden gonilnik razreši ime gostitelja.

Nadzor nad tunelom imejte zunaj aplikacije. Storitev v PHP ali Javi, ki poskuša sama dvigniti povezavo, v poslovno kodo vgradi vedenje enega ponudnika, in vsak preklop ob napaki postane izdaja aplikacije. Nadzornik, ki ima tunel v lasti, ga spremlja in znova zažene, je ločena zadeva od poti poizvedbe.

Preverite pot, preden obtožite gonilnik: če se gostitelj ne razreši ali vrata iz lupine ne odgovorijo, noben povezovalni niz tega ne bo spremenil.

Mit: neuspešno preverjanje pristnosti Windows pomeni, da je pot zlomljena

Preverjanje pristnosti Windows prek VPN pogosto ne uspe z napako, ki je videti kot omrežna okvara, pot pa je v redu. Ko račun pripada drugi domeni in se prenosnik ne more pridružiti, zaženite odjemalca z izrecnimi poverilnicami namesto identitete seje namizja.

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

Stikalo /netonly te poverilnice hrani samo za preverjanje pristnosti na daljavo. Preverite, kaj je strežnik dejansko prejel, s SELECT SUSER_SNAME(), namesto da bi zaupali pogovornemu oknu povezave. Poročajo, da shranjevanje poverilnic za naslov strežnika v Windows Credential Manager deluje za SSMS, ne pa vedno za storitev, ki teče pod drugim računom, zato pred spremembo prijave preverite, katero identiteto uporablja proces.

Zakasnitev spremeni kazalec na strani strežnika v časovno prekoračitev

Kazalec na strani strežnika prosi bazo podatkov, naj zadrži rezultat in ga postopoma prinaša, kar en velik rezultat spremeni v številna majhna kroženja. V lokalnem omrežju je to poceni. Skozi tunel z desetinami milisekund dodane zakasnitve lahko ista poizvedba preseže časovno prekoračitev ukaza, ne da bi prenesla skoraj nič podatkov.

Preklopite na kazalec na strani odjemalca ali povečajte velikost zajemanja in združite vrstice, pa število kroženj upade. Ozko grlo je število izmenjav, ne nominalna hitrost povezave, zato vas bo merjenje prepustnosti zavedlo, merjenje kroženj pa ne. Preizkusite z največjim naborom rezultatov, ki ga uporabniki res vlečejo, ne s poizvedbo ene vrstice, ki se vrne takoj. Če se časovna prekoračitev premika, a ne izgine, povečajte časovno prekoračitev ukaza in velikost zajemanja hkrati ter znova merite.

Ista aritmetika velja za klepetave ORM in za vsakega odjemalca, ki izda en stavek na vrstico. Če je načrt poizvedbe dober in prenos majhen, preštejte omrežne izmenjave, preden nastavite bazo podatkov.

Preverite vrata, instanco in lokalni filter

Poimenovana instanca posluša na dinamičnih vratih, zato potrdite vrata, namesto da predpostavljate 1433. Na privzeti instanci je vrednost mogoče prebrati iz registrske vrednosti TcpPort pod ključem SuperSocketNetLib te instance. Za Oracle preverite, da se gostitelj v tnsnames.ora razreši, da naslov odgovori in da so vrata poslušalca dovoljena; 1521 je pogosta privzeta vrednost, ne jamstvo.

Nato izključite lasten seznam dostopa tunela in nazadnje lokalni protivirusni program ali požarni zid gostitelja, ki povezavo blokira tudi, ko sta odjemalec in strežnik na istem računalniku. Zabeležite stopnjo, ki ne uspe, preden spremenite konfiguracijo, ker razreševanje imen, dosegljivost TCP ter TLS ali prijava vsak ne uspejo z drugim sporočilom.

Stopnjo zapišite v zahtevek. Sicer bo naslednja oseba ponovila isto iskanje povezovalnega niza, s katerim se je vse začelo.

Sorodni članki