Els desenvolupadors continuen buscant el lloc on una cadena de connexió, una URL JDBC o una entrada de tnsnames.ora selecciona la VPN. No existeix aquest lloc. El túnel l'estableix el sistema operatiu o un client del proveïdor que registra un adaptador virtual, i cada biblioteca de base de dades per sobre utilitza la capa de socket resultant. Una cadena de connexió nomena un amfitrió, un port i una credencial, i aquest és tot el vocabulari.

Mite: la cadena de connexió pot seleccionar un túnel

El controlador obre un socket TCP cap a un amfitrió i un port. No té cap API per aixecar un túnel, cap camp per a un perfil de túnel i cap manera d'autenticar-se en una passarel·la VPN.

Per això les eines es comporten igual quan existeix una ruta. SSMS, DBeaver, Eclipse Data Tools i un sqlcmd simple actuen com si el servidor fos a la xarxa local, perquè des del punt de vista del socket ho és. L'adaptador virtual va fer accessible la subxarxa de la base de dades, i el controlador mai no sap com.

També explica per què una cadena de connexió no pot reparar un túnel caigut. Quan l'enllaç mor, el controlador informa d'un temps d'espera o d'un error de xarxa general, i el codi d'aplicació que ho tracta com un problema de consulta reintenta la capa equivocada per sempre.

Aixeca el túnel abans que s'executi el controlador

Connecta la VPN a nivell de sistema operatiu, seguint les instruccions del proveïdor o de l'equip de xarxa, i només després obre l'eina. A la pràctica això vol dir que hi ha una ruta cap a la subxarxa de la base de dades abans que el controlador resolgui el nom d'amfitrió.

Mantén la supervisió del túnel fora de l'aplicació. Un servei PHP o Java que intenta aixecar l'enllaç per si mateix codifica el comportament d'un proveïdor dins del codi de negoci, i cada basculació es converteix en una versió de l'aplicació. Un supervisor que posseeix el túnel, el vigila i el reinicia és un assumpte separat del camí de la consulta.

Comprova la ruta abans de culpar el controlador: si l'amfitrió no resol o el port no respon des del shell, cap cadena de connexió ho canviarà.

Mite: un error d'autenticació de Windows vol dir que la ruta està trencada

L'autenticació de Windows a través d'una VPN sovint falla amb un error que sembla una fallada de xarxa, i la ruta està bé. Quan el compte pertany a un altre domini i l'ordinador portàtil no s'hi pot unir, inicia el client amb credencials explícites en lloc de la identitat de la sessió d'escriptori.

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

L'interruptor /netonly conserva aquestes credencials només per a l'autenticació remota. Confirma què ha rebut realment el servidor amb SELECT SUSER_SNAME() en lloc de confiar en el diàleg de connexió. Es diu que desar la credencial de l'adreça del servidor a Windows Credential Manager funciona per a SSMS però no sempre per a un servei que s'executa sota un altre compte, així que comprova quina identitat fa servir el procés abans de canviar l'inici de sessió.

La latència converteix un cursor del costat del servidor en un temps d'espera

Un cursor del costat del servidor demana a la base de dades que guardi el resultat i el reculli de manera incremental, cosa que converteix un resultat gran en moltes anades i tornades petites. En una LAN això és barat. Per un túnel amb desenes de mil·lisegons de latència afegida, la mateixa consulta pot superar el temps d'espera de l'ordre sense transferir gairebé cap dada.

Passa a un cursor del costat del client, o apuja la mida de recuperació i agrupa les files, i el nombre d'anades i tornades baixa. El coll d'ampolla és el nombre d'intercanvis, no la velocitat nominal de l'enllaç, així que mesurar el rendiment et confondrà mentre que mesurar les anades i tornades no. Prova amb el conjunt de resultats més gran que els teus usuaris realment estirin, no amb una consulta d'una fila que torna a l'instant. Si el temps d'espera es mou però no desapareix, apuja el temps d'espera de l'ordre i la mida de recuperació alhora i torna a mesurar.

La mateixa aritmètica val per als ORM xerraires i per a qualsevol client que emet una sentència per fila. Si el pla de consulta és bo i la transferència és petita, compta els intercanvis de xarxa abans d'ajustar la base de dades.

Comprova el port, la instància i el filtre local

Una instància amb nom escolta en un port dinàmic, així que confirma el port en lloc de suposar 1433. En una instància per defecte el valor es pot llegir del valor de registre TcpPort sota la clau SuperSocketNetLib de la instància. Per a Oracle, verifica que l'amfitrió de tnsnames.ora resolgui, que l'adreça respongui i que el port del listener estigui permès; 1521 és un valor per defecte habitual, no una garantia.

Després descarta la llista d'accés del propi túnel i, finalment, un antivirus local o un tallafoc d'amfitrió que bloquegi la connexió fins i tot quan client i servidor són la mateixa màquina. Captura l'etapa que falla abans de canviar la configuració, perquè la resolució de noms, l'abastabilitat TCP i TLS o l'inici de sessió fallen cadascun amb un missatge diferent.

Escriu l'etapa al tiquet. Si no, la següent persona repetirà la mateixa cerca de cadena de connexió amb què va començar tot.

Articles relacionats