Nee, 'n konneksiestring kan nie jou VPN-tonnel begin nie
Die VPN word deur die bedryfstelsel of 'n kliënt besit, nooit deur die drywer nie. Bring eers die tonnel op, gee domeinbewyse met netonly deur, en kyk dan na cursor-retourritte.
Ontwikkelaars bly soek na die plek waar 'n konneksiestring, 'n JDBC-URL of 'n tnsnames.ora-inskrywing die VPN kies. Daar is nie so 'n plek nie. Die tonnel word deur die bedryfstelsel of 'n verskafferkliënt opgerig wat 'n virtuele adapter registreer, en elke databasisbiblioteek daarbo gebruik die socketlaag wat daaruit volg. 'n Konneksiestring noem 'n gasheer, 'n poort en 'n bevoegdheid, en dit is die hele woordeskat.
Mite: die konneksiestring kan 'n tonnel kies
Die drywer maak 'n TCP-socket na 'n gasheer en poort oop. Dit het geen API om 'n tonnel op te rig nie, geen veld vir 'n tonnelprofiel nie, en geen manier om by 'n VPN-gateway te authentiseer nie.
Dit is hoekom die gereedskap identies optree sodra 'n roete bestaan. SSMS, DBeaver, Eclipse Data Tools en 'n gewone sqlcmd tree almal op asof die bediener op die plaaslike netwerk is, want uit die socket se oogpunt is dit so. Die virtuele adapter het die databasis-subnet bereikbaar gemaak, en die drywer weet nooit hoe nie.
Dit verduidelik ook hoekom 'n konneksiestring nie 'n onderbroke tonnel kan herstel nie. Wanneer die skakel sterf, rapporteer die drywer 'n time-out of 'n algemene netwerkfout, en toepassingskode wat dit as 'n navraagprobleem behandel, herprobeer vir ewig die verkeerde laag.
Bring die tonnel op voordat die drywer hardloop
Verbind die VPN op bedryfstelselvlak, volgens die verskaffer of die netwerkspan se instruksies, en maak eers daarna die gereedskap oop. In die praktyk beteken dit daar is 'n roete na die databasis-subnet voordat die drywer die gasheernaam oplos.
Hou tonneltoesig buite die toepassing. 'n PHP- of Java-diens wat self die skakel probeer opry, kodeer een verskaffer se gedrag in besigheidskode, en elke failover word 'n toepassingsvrystelling. 'n Toesighouer wat die tonnel besit, dit dophou en dit herbegin, is 'n aparte saak van die navraagpad.
Kontroleer die roete voordat jy die drywer blameer: as die gasheer nie oplos nie of die poort nie uit die shell antwoord nie, sal geen konneksiestring dit verander nie.
Mite: 'n Windows-verifikasiefout beteken die roete is stukkend
Windows-verifikasie oor 'n VPN misluk dikwels met 'n fout wat soos 'n netwerkfout lyk, en die roete is reg. Wanneer die rekening aan 'n ander domein behoort en die skootrekenaar nie daarby kan aansluit nie, begin die kliënt met eksplisiete bevoegdhede in plaas van die lessenaarsessie se identiteit.
runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"Die /netonly-skakelaar hou daardie bevoegdhede slegs vir afstandverifikasie. Bevestig wat die bediener werklik ontvang het met SELECT SUSER_SNAME() eerder as om die verbindingsdialoog te vertrou. Om die bevoegdheid vir die bedieneradres in Windows Credential Manager te stoor, werk na bewering vir SSMS maar nie altyd vir 'n diens wat onder 'n ander rekening loop nie, so kyk watter identiteit die proses gebruik voordat jy die aanmelding verander.
Latensie verander 'n bedienerkant-cursor in 'n time-out
'n Bedienerkant-cursor vra die databasis om die resultaat te hou en dit inkrementeel te haal, wat een groot resultaat in baie klein retourritte omskep. Op 'n LAN is dit goedkoop. Oor 'n tonnel met tien millisekondes bykomende latensie kan dieselfde navraag die opdrag-time-out oorskry sonder om veel data oor te dra.
Skakel oor na 'n kliëntkant-cursor, of verhoog die fetch size en batch die rye, en die aantal retourritte daal. Die bottelnek is die aantal uitruilings, nie die nominale skakelspoed nie, so om deurset te meet sal jou mislei terwyl om retourritte te meet dit nie sal doen nie. Toets met die grootste resultaatstel wat jou gebruikers werklik trek, nie met 'n navraag van een ry wat onmiddellik terugkom nie. As die time-out skuif maar nie verdwyn nie, verhoog die opdrag-time-out en die fetch size saam en meet weer.
Dieselfde rekenkunde geld vir spraaksame ORM's en vir enige kliënt wat een stelling per ry uitreik. As die navraagplan reg is en die oordrag klein is, tel die netwerkuitruilings voordat jy die databasis instel.
Kontroleer die poort, die instansie en die plaaslike filter
'n Benoemde instansie luister op 'n dinamiese poort, so bevestig die poort in plaas daarvan om 1433 te aanvaar. Op 'n verstekinstansie kan die waarde gelees word uit die TcpPort-registerwaarde onder die instansie se SuperSocketNetLib-sleutel. Vir Oracle, verifieer dat die gasheer in tnsnames.ora oplos, dat die adres antwoord, en dat die listener-poort toegelaat word; 1521 is 'n algemene verstek, nie 'n waarborg nie.
Sluit dan die tonnel se eie toegangslys uit en, laastens, 'n plaaslike antivirus of gasheer-firewall wat die verbinding blokkeer selfs wanneer kliënt en bediener dieselfde masjien is. Vang die falende stadium voordat jy konfigurasie verander, want naamresolusie, TCP-bereikbaarheid en TLS of aanmelding misluk elkeen met 'n ander boodskap.
Skryf die stadium in die kaartjie. Die volgende persoon sal andersins dieselfde konneksiestring-soektog herhaal waarmee dit begin het.