Vai al contenuto

Comprensione del funzionamento dei driver SQL e dei token di accesso

Nell’era del cloud e dell’autenticazione tramite token, comprendere come funzionano i driver SQL e i token di accesso è fondamentale per garantire la sicurezza e l’efficienza dei sistemi informatici.

Nel mondo dell’informatica, i driver SQL e i token di accesso sono strumenti fondamentali per garantire l’autenticazione sicura e l’accesso ai database. Tuttavia, la comprensione di come funzionano questi due elementi può essere complessa e richiede una conoscenza approfondita di vari concetti chiave. In questo articolo, esploreremo in profondità come funzionano i driver SQL e i token di accesso, con particolare attenzione ai problemi legati all’uso di Microsoft Entra ID (precedentemente noto come Azure Active Directory) per l’autenticazione.

Il Problema

Gli errori correlati ai token di accesso scaduti sono un problema comune nei sistemi informatici. Questi errori possono avvenire durante l’apertura di una connessione o l’esecuzione di un’istruzione e, di solito, si presentano come un generico e non molto utile “Login fallito per l’utente ‘xxxxxx'”.

Lo Sfondo

Le connessioni a SQL utilizzano il protocollo MS-TDS, che è uno stato di connessione. Questo significa che il client si autentica all’inizio della connessione e la connessione viene mantenuta aperta finché il client non la chiude. Non esiste un meccanismo per ri-autenticarsi (invio di un nuovo token di accesso) in TDS in qualsiasi momento diverso dall’inizio di una connessione.

Spesso, gli access token vengono validati al momento dell’apertura della connessione e in caso di evento di RESETCONNECTION. Un evento RESETCONNECTION si verifica quando un driver imposta lo stato di RESETCONNECTION nel pacchetto successivo. Questo è destinato ad essere utilizzato nel contesto del pool di connessioni. Quando il server vede lo stato, resetta l’ambiente prima di eseguire l’istruzione. Questo aiuta a prevenire che le connessioni fisiche “sporche” influenzino le diverse connessioni logiche.

Parlando di pool di connessioni, non tutti i driver gestiscono il pool di connessioni allo stesso modo, quindi è rilevante per i token di accesso chiarire come funziona il pool di connessioni.

Nel pool di connessioni ODBC, la gestione è a cura del gestore del driver ODBC, che è responsabile del caricamento del driver ODBC corretto richiesto dall’applicazione. Il gestore del driver ODBC segnala un driver ODBC quando una connessione entra ed esce dal pool di connessioni, quindi il driver ODBC per SQL Server sa quando impostare lo stato di RESETCONNECTION. Allo stesso tempo, sa anche se ha bisogno di ottenere un nuovo token di accesso e aprire una nuova connessione in questo evento.

Nel pool di connessioni JDBC, la gestione è a cura di librerie di terze parti. Esistono classi specifiche del pool di connessioni JDBC che devono essere utilizzate dalla libreria del pool di connessioni. Queste classi includono API per far sapere al driver quando una connessione entra o esce da un pool di connessioni. Questo segnale è necessario per il driver per poter impostare lo stato di RESETCONNECTION.

Il pool di connessioni .NET, in particolare System.Data.SqlClient, o SDS, e Microsoft.Data.SqlClient, o MDS, implementa il pool di connessioni internamente. Se il pool usa l’autenticazione basata su token, SqlClient controlla la data di scadenza del token prima di cedere la connessione all’applicazione. Se il token è scaduto o vicino alla scadenza (10 minuti), tutte le connessioni nel pool sono riciclate e viene creata una nuova connessione con un nuovo token.

Il driver SQL ha anche una proprietà di connessione che consente a un’applicazione di passare un token di accesso in un modo o nell’altro. Se una connessione viene presa da un pool con un token di accesso scaduto e il server vede RESETCONNECTION nell’intestazione, il server convalida il token di accesso prima di eseguire la query che viene inviata. Questo comporta un errore di esecuzione che l’applicazione dovrà gestire.

Alla luce di ciò, bisogna fare attenzione quando si decide come gestire i token di accesso e come configurare i driver SQL per garantire la sicurezza e l’efficienza del sistema informatico.