Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Anche se Microsoft Entra ID è il nuovo nome per Azure Active Directory (Azure AD), per evitare l'interruzione degli ambienti esistenti, la denominazione Azure AD è tuttora mantenuta in alcuni elementi hardcoded, ad esempio campi dell'interfaccia utente, provider di connessioni, codici errore e cmdlet. In questo articolo, i due nomi sono intercambiabili.
Scopo
Microsoft ODBC Driver for SQL Server versione 13.1 o successiva consente alle applicazioni ODBC di connettersi al database SQL di Azure o a un'istanza gestita di SQL Azure usando identità di Microsoft Entra ID. L'autenticazione può essere eseguita con un nome utente e una password, un token di accesso Microsoft Entra, un'identità gestita di Microsoft Entra (17.3+) oppure con l'autenticazione integrata di Windows in un ambiente federato aggiunto a un dominio (17.6+ in Linux/macOS). Per la versione 13.1 del Driver ODBC, l'autenticazione tramite token di accesso di Microsoft Entra è solo su Windows. Il driver ODBC versione 17 e successive supporta questa autenticazione in tutte le piattaforme (Windows, Linux e macOS). Un nuovo metodo di autenticazione interattiva di Microsoft Entra, che supporta l'autenticazione a più fattori, è stato introdotto nella versione 17.1 del Driver ODBC per Windows. Un nuovo metodo di autenticazione dell'identità gestita di Microsoft Entra è stato aggiunto nella versione del driver ODBC 17.3.1.1 per le identità assegnate dall'utente e dal sistema. Tutte queste opzioni sono realizzate usando le nuove parole chiave DSN e per la stringa di connessione, nonché gli attributi di connessione.
Per usare l'autenticazione di Microsoft Entra, è necessario configurare l'origine dati Azure SQL. Per altre informazioni, vedere Configurare e gestire l'autenticazione di Microsoft Entra con Azure SQL.
Nota
Il driver ODBC in Linux e macOS nelle versioni precedenti alla 17.6 supporta solo l'autenticazione di Microsoft Entra direttamente con Microsoft Entra ID. Se si usa l'autenticazione con nome utente/password di Microsoft Entra da un client Linux o macOS e la configurazione di Microsoft Entra richiede che il client esegua l'autenticazione in un endpoint dei servizi federativi Microsoft Entra, l'autenticazione potrebbe non riuscire. A partire dalla versione 17.6 del driver, questa restrizione è stata eliminata.
Parole chiave della stringa di connessione e DSN nuovi e/o modificati
È possibile usare la parola chiave Authentication quando ci si connette con un DSN o una stringa di connessione per controllare la modalità di autenticazione. Il valore impostato nella stringa di connessione sostituisce il valore nel DSN, se specificato. Il valore pre-attributo dell'impostazione Authentication è il valore calcolato in base ai valori della stringa di connessione e del DSN.
| Nome | Valori/Valore predefinito | Descrizione |
|---|---|---|
Authentication |
(not set)(impostazione predefinita), (empty string), SqlPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryMsi, ActiveDirectoryServicePrincipal[ ActiveDirectoryPassword DEPRECATO] |
Controlla la modalità di autenticazione.(not set) - Modalità di autenticazione determinata da altre parole chiave (opzioni di connessione legacy esistenti).(empty string) - (solo stringa di connessione.) Sovrascrive e rimuove un valore Authentication impostato nel DSN.SqlPassword - Eseguire direttamente l'autenticazione a SQL usando un nome utente e una password.ActiveDirectoryIntegrated
-
Solo driver Windows e Linux/Mac 17.6+. Eseguire l'autenticazione con una credenziale Windows federata tramite Microsoft Entra ID, con autenticazione integrata.ActiveDirectoryInteractive
-
Driver solo per Windows. Eseguire l'autenticazione con un'identità di Microsoft Entra usando l'autenticazione interattiva.ActiveDirectoryMsi - Eseguire l'autenticazione con un'identità gestita di Microsoft Entra. Per un'identità assegnata dall'utente, impostare UID sull'ID client dell'identità per Servizio app di Azure o Azure Container Instance; in caso contrario, usare il relativo ID oggetto. Per l'identità assegnata dal sistema, non è obbligatorio l’UID.ActiveDirectoryServicePrincipal - (17.7+) Eseguire l'autenticazione con un principale del servizio Microsoft Entra. UID è l'ID client dell'entità del servizio. PWD è impostato come segreto client.ActiveDirectoryPassword - [DEPRECATO] Eseguire l'autenticazione con un'identità di Microsoft Entra usando un nome utente e una password.ActiveDirectoryPassword è obsoleto. Per ulteriori informazioni, vedere ActiveDirectoryPassword è deprecato. |
Encrypt |
(not set) (predefinito), Yes/Mandatory (versioni 18.0 e successive), No/Optional (versioni 18.0 e successive), Strict (versioni 18.0 e successive) |
Controlla la crittografia per una connessione. Quando non imposti esplicitamente la crittografia, il Driver 17 usa Yes per impostazione predefinita se il valore pre-attributo di Authentication non è none o se è impostato SQL_COPT_SS_ACCESS_TOKEN; altrimenti, il valore predefinito è No. Nel driver 18.0.1 e versioni successive, il valore predefinito è Yes (Mandatory). Autenticazione e crittografia rimangono impostazioni separate. Se SQL_COPT_SS_AUTHENTICATION sovrascrive il valore pre-attributo di Authentication, imposta esplicitamente la crittografia nel DSN, nella stringa di connessione o nell'attributo di connessione SQL_COPT_SS_ENCRYPT. |
Attributi di connessione nuovi e/o modificati
Per supportare l'autenticazione di Microsoft Entra sono stati introdotti o modificati i seguenti attributi di preconnessione. Quando un attributo di connessione ha una parola chiave della stringa di connessione o del DSN corrispondente e viene impostato, l'attributo di connessione ha la precedenza.
| Attributo | Tipo | Valori | Valore predefinito | Descrizione |
|---|---|---|---|---|
SQL_COPT_SS_AUTHENTICATION |
SQL_IS_INTEGER |
SQL_AU_NONE, SQL_AU_PASSWORD, SQL_AU_AD_INTEGRATED, SQL_AU_AD_PASSWORDSQL_AU_AD_INTERACTIVE, SQL_AU_AD_MSI, , SQL_AU_AD_SPASQL_AU_RESET |
(non impostato) | Vedere la descrizione della parola chiave Authentication fornita in precedenza. Il valore SQL_AU_NONE viene fornito per eseguire l'override in modo esplicito di un valore Authentication impostato nel DSN e/o nella stringa di connessione, mentre SQL_AU_RESET annulla l'impostazione dell'attributo, se è stato impostato, per dare la precedenza al valore del DSN o della stringa di connessione. |
SQL_COPT_SS_ACCESS_TOKEN |
SQL_IS_POINTER |
Puntatore a ACCESSTOKEN o NULL |
NULL | Se diverso da Null, specifica il token di accesso di Microsoft Entra da usare. È un errore specificare un token di accesso e anche le parole chiave della stringa di connessione UID, PWD, Trusted_Connection o Authentication oppure gli attributi equivalenti. NOTA: la versione 13.1 del driver ODBC supporta questa impostazione solo in Windows. |
SQL_COPT_SS_ENCRYPT |
SQL_IS_INTEGER |
SQL_EN_OFF, SQL_EN_ON |
(vedere la descrizione) | Gestisce la richiesta di crittografia del cliente.
SQL_EN_OFF non impedisce al server di richiedere la crittografia. Nel driver 17, se non imposti esplicitamente la crittografia e il valore pre-attributo di Authentication non è SQL_COPT_SS_ACCESS_TOKEN o SQL_EN_ON è impostato, il valore predefinito è none. Altrimenti, il driver 17 usa come predefinito SQL_EN_OFF. Nel driver 18.0.1 e versioni successive, il valore predefinito è SQL_EN_ON indipendentemente dall'autenticazione quando non si imposta esplicitamente la crittografia. Se SQL_COPT_SS_AUTHENTICATION sovrascrive il valore precedente dell'attributo di Authentication, imposta esplicitamente la crittografia nel DSN, nella stringa di connessione o in questo attributo. Per il comportamento di crittografia e validazione dei certificati, vedi Esempio di stringhe di connessione. |
SQL_COPT_SS_OLDPWD |
- | - | - | Non supportato con Microsoft Entra ID, poiché le modifiche della password ai principali di Microsoft Entra non possono essere eseguite con una connessione ODBC. In SQL Server 2005 è stata introdotta la scadenza della password per l'autenticazione di SQL Server. L'attributo SQL_COPT_SS_OLDPWD è stato aggiunto per consentire al client di specificare sia la vecchia password che la nuova per la connessione. Quando questa proprietà è impostata, il provider non userà il pool di connessioni per la prima connessione o per le connessioni successive, in quanto la stringa di connessione contiene la “vecchia password”, che è stata modificata. |
SQL_COPT_SS_INTEGRATED_SECURITY |
SQL_IS_INTEGER |
SQL_IS_OFF,SQL_IS_ON |
SQL_IS_OFF |
Deprecato; in alternativa, usare SQL_COPT_SS_AUTHENTICATION impostato su SQL_AU_AD_INTEGRATED. Forza l'utilizzo dell'autenticazione di Windows (Kerberos in Linux e macOS) per la convalida dell'accesso in fase di connessione al server. Quando viene usata l'autenticazione di Windows, il driver ignora i valori di ID utente e password specificati come parte dell'elaborazione di SQLConnect, SQLDriverConnect o SQLBrowseConnect. |
La funzionalità ActiveDirectoryPassword è obsoleta.
Importante
L'opzione di autenticazione ActiveDirectoryPassword (autenticazione Microsoft Entra ID password) è deprecata nei driver SQL Microsoft. Questo flusso di autenticazione ad alto rischio non è compatibile con l'autenticazione a Microsoft Entra più fattori (MFA) obbligatoria e potrebbe non funzionare nei tenant in cui viene applicata l'autenticazione a più fattori. Pianificare la migrazione a un metodo di autenticazione Microsoft Entra diverso.
L'autenticazione tramite password di Microsoft Entra ID si basa sul flusso di concessione Resource Owner Password Credentials (ROPC) di OAuth 2.0, che consente a un'applicazione di eseguire l'accesso dell'utente gestendone direttamente la password.
Microsoft consiglia di non usare il flusso ROPC perché non è compatibile con MFA. Nella maggior parte degli scenari sono disponibili alternative più sicure e consigliate. Questo flusso richiede un elevato livello di attendibilità nell'applicazione e comporta rischi che non sono presenti in altri flussi. Usare questo flusso solo quando non sono validi flussi più sicuri. Microsoft si sta allontanando da questo flusso di autenticazione ad alto rischio per proteggere gli utenti da attacchi dannosi. Per altre informazioni, vedere Pianificazione dell'autenticazione a più fattori obbligatoria per Azure.
Quando un utente è presente durante l'accesso, usare l'autenticazione ActiveDirectoryInteractive o ActiveDirectoryIntegrated in modo che la traccia di controllo venga attribuita all'utente che ha effettuato l'accesso e si applichino i criteri di Accesso Condizionale.
Per gli scenari non presidiati servizio-servizio, seguire le linee guida sugli account di servizio Microsoft Entra:
- Se l'applicazione viene eseguita nell'infrastruttura Azure, usare ActiveDirectoryMSI (o ActiveDirectoryManagedIdentity in alcuni driver). Le identità gestite eliminano il sovraccarico di gestione e rotazione di segreti e certificati.
- Se l'identità gestita non è disponibile( ad esempio, l'applicazione viene eseguita all'esterno di Azure), usare ActiveDirectoryServicePrincipal. Se il driver lo supporta, preferire un certificato client anziché un segreto del client. Con un certificato, la chiave privata rimane sul client e solo un'asserzione firmata viene inviata a Microsoft Entra per autenticare il client. Se la chiave viene archiviata nell'hardware (ad esempio un TPM o un modulo di protezione hardware) o contrassegnata come non esportabile, non può essere copiata come stringa nel modo in cui un segreto client può.
- Non usare un account utente Microsoft Entra come account del servizio.
Aggiunte dell'interfaccia utente per Microsoft Entra ID (solo driver di Windows)
La configurazione del DSN e le interfacce utente di connessione del driver sono state migliorate con le opzioni aggiuntive necessarie per l'eseguire l'autenticazione con Microsoft Entra ID.
Creazione e modifica dei DSN nell'interfaccia utente
È possibile usare le nuove opzioni di autenticazione di Microsoft Entra quando si crea o si modifica un DSN esistente usando l'interfaccia utente di installazione del driver:
Authentication=ActiveDirectoryIntegrated per l'autenticazione integrata di Microsoft Entra con Azure SQL
Authentication=ActiveDirectoryPassword per l’autenticazione con nome utente/password di Microsoft Entra in Azure SQL
Nota
"ActiveDirectoryPassword" è obsoleto. Per ulteriori informazioni, vedere ActiveDirectoryPassword è deprecato.
Authentication=ActiveDirectoryInteractive per l’autenticazione interattiva di Microsoft Entra in Azure SQL
Nota
A partire dalla versione 17.9 del driver, il comportamento di autenticazione interattiva è cambiato. Agli utenti vengono sempre chieste le credenziali, a meno che il driver non disponga di un token di accesso valido memorizzato nella cache. Questa modifica impedisce agli utenti nei dispositivi aggiunti a Microsoft Entra di ignorare il prompt e accedere automaticamente con le credenziali memorizzate nella cache quando viene usata l'autenticazione ActiveDirectoryInteractive.
Authentication=SqlPassword per l'autenticazione con nome utente/password in SQL Server e Azure SQL
Trusted_Connection=Yes per l'autenticazione integrata SSPI di tipo legacy su Windows
Authentication=ActiveDirectoryMsi per l’autenticazione dell’identità gestita di Microsoft Entra
Authentication=ActiveDirectoryServicePrincipal per l'autenticazione del principale del servizio di Microsoft Entra
Le sette opzioni corrispondono a Trusted_Connection=Yes (autenticazione integrata con solo SSPI di Windows legacy esistente) e Authentication=, ActiveDirectoryIntegrated, SqlPassword, ActiveDirectoryPassword, ActiveDirectoryInteractive, ActiveDirectoryMsi e ActiveDirectoryServicePrincipal, rispettivamente.
Prompt di SQLDriverConnect (solo per driver Windows)
La finestra di dialogo di richiesta visualizzata da SQLDriverConnect quando richiede le informazioni necessarie per completare la connessione contiene quattro nuove opzioni per l'autenticazione di Azure AD:
Queste opzioni corrispondono alle sei opzioni disponibili nell'interfaccia utente di configurazione del DSN descritta in precedenza.
Esempi di stringhe di connessione
Nota
Le descrizioni di crittografia e validazione dei certificati in questi esempi si applicano a connessioni remote ordinarie senza sovrascritture DSN o attributi di connessione, impostazioni del registro di Windows per Force Protocol Encryption o callback interni di validazione dei certificati di Windows. Descrivono l'assenza di crittografiaStrict. La crittografia limitata all’accesso protegge lo scambio di autenticazione, non i successivi dati dell’applicazione.
Con TrustServerCertificate=no e Encrypt=yes (il valore predefinito), i driver 17 e 18 richiedono la crittografia a sessione completa e convalidano il certificato server. Se il client imposta Encrypt=no ma il server richiede la crittografia a sessione completa, il Driver 17 non seleziona la normale validazione del certificato per quella richiesta solo server. Il driver 18 verifica lo stato di crittografia dell'intera sessione negoziato e valida il certificato a meno che non TrustServerCertificate=yes. Nel normale percorso non-Strict, TrustServerCertificate=yes sopprime la validazione normale; la crittografia forzata dal registro di Windows può selezionare la validazione indipendentemente da quell'impostazione, e un callback interno di Windows può sostituire il normale percorso di validazione.
Autenticazione di SQL Server - sintassi legacy. Il certificato del server non viene convalidato e la crittografia viene usata solo se viene imposta dal server. Nome utente e password vengono passati nella stringa di connessione.
server=Server;database=Database;UID=UserName;PWD=<password>;Encrypt=no;TrustServerCertificate=yes;Autenticazione SQL - nuova sintassi. Utilizzando
Authentication=SqlPassworde omettendo la crittografia come mostrato, i driver 17 e 18 richiedono automaticamente la crittografia a sessione completa. Il driver valida il certificato server con l'impostazione predefinitaTrustServerCertificate=no. Il nome utente e la password sono nella stringa di connessione.server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=SqlPassword;Autenticazione integrata di Windows (Kerberos in Linux e macOS) tramite SSPI (in SQL Server o SQL IaaS) - sintassi corrente. Con
Encrypt=no, la crittografia a sessione completa viene utilizzata solo se il server la richiede. Per quella richiesta solo per il server, il Driver 17 non seleziona la normale validazione del certificato; Il Driver 18 valida con il valoreTrustServerCertificate=nopredefinito .server=Server;database=Database;Trusted_Connection=yes;Encrypt=no;(Solo per driver di Windows.) Autenticazione integrata di Windows tramite SSPI (se il database di destinazione è in SQL Server o SQL Server in Azure VM) - nuova sintassi. Utilizzando
Authentication=ActiveDirectoryIntegratede omettendo la crittografia come mostrato, i driver 17 e 18 richiedono automaticamente la crittografia a sessione completa. Il driver valida il certificato server con l'impostazione predefinitaTrustServerCertificate=no.server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Autenticazione di nome utente e password Microsoft Entra (se il database target si trova in database SQL di Azure o Istanza gestita di SQL di Azure). La richiesta esplicita
Encrypt=yesrichiede la crittografia dell'intera sessione. Il driver valida il certificato del server con l'impostazione predefinitaTrustServerCertificate=no. Il nome utente e la password sono nella stringa di connessione.Nota
"ActiveDirectoryPassword" è obsoleto. Per ulteriori informazioni, vedere ActiveDirectoryPassword è deprecato.
server=Server;database=Database;UID=UserName;PWD=<password>;Authentication=ActiveDirectoryPassword;Encrypt=yes;(Windows, e versioni Linux/macOS 17.6 e successive, solo driver.) Autenticazione Windows integrata tramite ADAL o Kerberos, che consiste nel riscattare le credenziali dell'account Windows per un token di accesso Microsoft Entra, supponendo che il database di destinazione sia in Azure SQL. La richiesta esplicita
Encrypt=yesrichiede la crittografia per l'intera sessione. Il driver valida il certificato del server con l'impostazione predefinitaTrustServerCertificate=no. In Linux/macOS è necessario che sia disponibile un ticket Kerberos appropriato. Per maggiori informazioni, vedi Considerazioni per l'uso degli account federati ADFS su Linux/macOS e Utilizzo dell'Autenticazione Integrata.server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Encrypt=yes;(Solo driver Windows.) Microsoft Entra Interactive Authentication utilizza la tecnologia di autenticazione multifattore Microsoft Entra per stabilire una connessione. Puoi omettere
UIDcon il driver 17.8 e versioni successive, oppure impostarlo sull'account utente per l'autenticazione. Quando fornisciUID, la finestra di accesso potrebbe non offrire un modo per selezionare un altro account. Per usare un altro account, modificaUIDprima di connetterti, oppure omettilo con Driver 17.8 e versioni successive. Il driver apre una finestra di dialogo di Autenticazione Azure affinché l'utente possa completare eventuali verifiche aggiuntive.server=Server;database=Database;UID=UserName;Authentication=ActiveDirectoryInteractive;Encrypt=yes;
L'autenticazione con identità gestita di Microsoft Entra può usare un'identità gestita assegnata dal sistema o assegnata dall'utente. Per un'identità assegnata dall'utente, impostare UID sull'ID client dell'identità per Servizio app di Azure o Azure Container Instance; in caso contrario, usare il relativo ID oggetto. Per l'identità assegnata dal sistema, non è obbligatorio l’UID.
Per l'identità assegnata dal sistema:
server=Server;database=Database;Authentication=ActiveDirectoryMsi;Encrypt=yes;Per l'identità assegnata dall'utente con ID oggetto uguale a
myObjectId:server=Server;database=Database;UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;Autenticazione del principale di servizio di Microsoft Entra
server=Server;database=Database;UID=clientId;PWD=<password>;Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;
Osservazioni:
Quando si usano le opzioni di Microsoft Entra con il driver ODBC di Windows con una versione precedente alla 17.4.2, assicurarsi che sia stata eseguita l'installazione di Active Directory Authentication Library per SQL Server. Quando si usano i driver Linux e macOS, assicurarsi che
libcurlsia stato installato. Per la versione del driver 17.2 e versioni successive, questa non è una dipendenza esplicita poiché non è necessaria per gli altri metodi di autenticazione o per le operazioni ODBC.Quando la configurazione di Microsoft Entra include criteri di accesso condizionale e il client è Windows 10 o Server 2016 o versione successiva, l'autenticazione integrata o tramite nome utente/password potrebbe non riuscire. I criteri di accesso condizionale richiedono l'uso del servizio Gestione account Web (WAM, Web Account Manager), supportato nella versione 17.6 del driver o successiva per Windows. Per usare WAM, creare un nuovo valore stringa denominato
ADALuseWAMinHKLM\Software\ODBC\ODBCINST.INI\ODBC Driver 17 for SQL Server,HKCU\Software\ODBC\ODBC.INI\<your-user-DSN-name>oHKLM\Software\ODBC\ODBC.INI\<your-system-DSN-name>per la configurazione globale, DSN utente o con ambito DSN di sistema rispettivamente e impostarlo su un valore pari a 1. Si noti che l'autenticazione con WAM non supporta l'esecuzione dell'applicazione come utente diverso conrunas. Gli scenari che richiedono criteri di accesso condizionale non sono supportati per Linux o macOS.Per connettersi usando il nome utente e la password di un account SQL Server, è ora possibile usare la nuova opzione
SqlPassword, che è consigliata in particolare per Azure SQL poiché abilita impostazioni predefinite della connessione più sicure.Per connettersi usando il nome utente e la password di un account Microsoft Entra, specificare
Authentication=ActiveDirectoryPasswordnella stringa di connessione e le parole chiaveUIDePWDrispettivamente con nome utente e password.Nota
"ActiveDirectoryPassword" è obsoleto. Per ulteriori informazioni, vedere ActiveDirectoryPassword è deprecato.
Per connettersi usando l'autenticazione integrata di Windows o di Microsoft Entra (solo con driver Windows e Linux/macOS 17.6+), specificare
Authentication=ActiveDirectoryIntegratednella stringa di connessione. Il driver sceglierà automaticamente la modalità di autenticazione corretta. Per le versioni del driver 17.7 o precedenti, non specificareUIDePWD. A partire dal driver versione 17.8, gli elementiUIDePWDvengono ignorati.Per connetterti usando l'autenticazione interattiva Microsoft Entra (solo driver Windows), puoi omettere il parametro
UIDcon il driver 17.8 e versioni successive, oppure impostarlo sull'account utente per l'autenticazione. La finestra di accesso potrebbe non permetterti di cambiare account quando fornisciUID. Per usare un altro account, modifica il valore diUIDprima di connetterti, oppure omettilo con Driver 17.8 e versioni successive. Le versioni del driver 17.7 e precedenti richiedonoUIDe vietanoPWD. A partire dal driver versione 17.8, l'elementoPWDviene ignorato.A partire dalla versione 18.1,
Trusted_Connection=Yesnon usa più come impostazione predefinita l'autenticazione federata di Microsoft Entra ID, bensì l'autenticazione integrata con SSPI. Per usare Microsoft Entra ID per questa opzione, è necessario configurareTrustedConnection_UseAAD=Yes.Le versioni del driver ODBC 17.7 e precedenti presentano un problema noto con il timeout della connessione quando in un'istanza di SQL Server sono abilitate l'autenticazione di Microsoft Entra e la crittografia forzata. Il log degli errori di SQL Server può contenere messaggi di errore, come: "Errore: 33155, gravità: 20, stato: 1. È stato generato un evento di disconnessione mentre il server è in attesa del token di autenticazione federata. Ciò potrebbe essere dovuto alla chiusura del client o al timeout scaduto del server”. Se si usano soluzioni a disponibilità elevata, ad esempio gruppi di disponibilità Always On o istanze del cluster di failover, la comunicazione interna del cluster per SQL Server può essere influenzata da questo comportamento, che può influire sulla disponibilità delle risorse. Nel log del cluster potrebbero essere visualizzati messaggi di errore, come:
[hadrag] Connect to SQL Server ...ODBC Error: [HY000] [Microsoft][ODBC Driver 17 for SQL Server]An unknown error has occurred. Detailed error information is not available. (0). Le versioni del driver ODBC 17.10 e successive risolvono questo problema e con SQL Server 2022 GDR KB5021522 /CU1 KB5022375, con l'installazione di SQL Server viene installato il driver più recente che contiene questa correzione. È possibile verificare quale versione del driver ODBC hai installato consultando l'amministratore origine dati ODBC.A partire dalla versione 18.3 del driver ODBC, l'autenticazione dell'identità gestita (ActiveDirectoryMSI) è supportata in Azure Arc e Azure Cloud Shell.
Autenticazione con un token di accesso
L'attributo di preconnessione SQL_COPT_SS_ACCESS_TOKEN consente di usare un token di accesso ottenuto da Microsoft Entra ID per l'autenticazione anziché nome utente e password e ignora anche la negoziazione e il recupero di un token di accesso da parte del driver. Per usare un token di accesso, impostare l'attributo di connessione SQL_COPT_SS_ACCESS_TOKEN su un puntatore a una struttura ACCESSTOKEN:
typedef struct AccessToken
{
DWORD dataSize;
BYTE data[];
} ACCESSTOKEN;
ACCESSTOKEN è una struttura a lunghezza variabile costituita da una lunghezza di 4 byte seguita da byte lunghezza di dati opachi che formano il token di accesso. A causa del modo in cui SQL Server gestisce i token di accesso, un token ottenuto tramite una risposta JSON OAuth 2.0 deve essere espanso in modo che ogni byte sia seguito da un byte di aggiunta di zero prima del numero, analogamente a una stringa UCS-2 contenente solo caratteri ASCII. Il token, tuttavia, è un valore opaco e la lunghezza specificata, in byte, NON deve includere alcun carattere di terminazione Null. A causa dei vincoli di lunghezza e di formato considerevoli, questo metodo di autenticazione è disponibile solo a livello di codice tramite l'attributo di connessione SQL_COPT_SS_ACCESS_TOKEN.
Devi mantenere ACCESSTOKEN assegnato per tutto il tempo che l'handle di connessione sarà assegnato. Altrimenti, potrebbero verificarsi violazioni di accesso. Quando usi il Windows ODBC Driver Manager, il puntatore del token fa parte della chiave del pool di connessione, quindi un puntatore diverso seleziona un pool diverso. Mantieni il buffer associato alla stessa identità quando sostituisci un token scaduto. Aggiornare il buffer non cambia l'identità di una connessione già autenticata.
Caution
Su Linux e macOS, il pool di connessione unixODBC non usa SQL_COPT_SS_ACCESS_TOKEN per distinguere le identità. Quando usi la stessa stringa di connessione, una richiesta di connessione con un token diverso può riutilizzare una connessione pooled autenticata come identità precedente. Se il tuo processo si collega con token per identità diverse, disabilita il pooling unixODBC prima di avviarlo: imposta Pooling=No nella sezione [ODBC] del file odbcinst.ini effettivo e assicurati che la tua applicazione e le sue librerie non abilitino il pooling ODBC. Riavvia i processi applicativi esistenti dopo aver cambiato la configurazione. Non affidarti al cambiare i puntatori dei token per isolare le identità.
Non è disponibile alcuna parola chiave per la stringa di connessione o DSN corrispondente. La stringa di connessione non deve contenere le parole chiave UID, PWD, Authentication o Trusted_Connection.
Nota
La versione 13.1 del driver ODBC supporta questa autenticazione solo in Windows. Le versioni successive supportano questo tipo di autenticazione in tutte le piattaforme.
Codice di esempio di autenticazione in Microsoft Entra
L'esempio seguente mostra il codice necessario per connettersi a SQL Server usando Microsoft Entra ID con le parole chiave di connessione. Non è necessario modificare il codice dell'applicazione. La stringa di connessione o il DSN, se usato, è l'unica modifica necessaria per usare Microsoft Entra ID per l'autenticazione:
...
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;PWD=<password>;Authentication=ActiveDirectoryInteractive;Encrypt=yes;"
...
SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
...
L'esempio seguente mostra il codice necessario per connettersi a SQL Server usando Microsoft Entra con l'autenticazione con token di accesso. In questo caso, è necessario modificare il codice dell'applicazione per elaborare il token di accesso e impostare l'attributo di connessione associato.
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Encrypt=yes;"
SQLCHAR accessToken[] = "eyJ0eXAiOi..."; // In the format extracted from an OAuth JSON response
...
DWORD dataSize = 2 * strlen(accessToken);
ACCESSTOKEN *pAccToken = malloc(sizeof(ACCESSTOKEN) + dataSize);
pAccToken->dataSize = dataSize;
// Expand access token with padding bytes
for(int i = 0, j = 0; i < dataSize; i += 2, j++) {
pAccToken->data[i] = accessToken[j];
pAccToken->data[i+1] = 0;
}
...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_ACCESS_TOKEN, (SQLPOINTER)pAccToken, SQL_IS_POINTER);
SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
...
free(pAccToken);
Di seguito è riportata una stringa di connessione di esempio da usare con l'autenticazione interattiva di Microsoft Entra. Non contiene il campo PWD poiché la password viene immessa usando la schermata di autenticazione di Azure.
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;Authentication=ActiveDirectoryInteractive;Encrypt=yes;"
Di seguito è riportata una stringa di connessione di esempio da usare con l'autenticazione di identità gestita di Microsoft Entra. UID è l'ID oggetto/client dell'identità utente quando si usa un'identità assegnata dall'utente.
// For system-assigned identity,
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Authentication=ActiveDirectoryMsi;Encrypt=yes;"
...
// For user-assigned identity with object ID equals to myObjectId
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;"
Considerazioni sull'utilizzo di account federati ADFS in Linux/macOS
A partire dalla versione 17.6, i driver per Linux e macOS supportano l'autenticazione con account federati ADFS tramite l'uso di nome utente/password (ActiveDirectoryPassword) o Kerberos (ActiveDirectoryIntegrated). Sono presenti alcune limitazioni che dipendono dalla piattaforma quando si usa la modalità integrata.
Quando si esegue l'autenticazione con un utente il cui suffisso UPN è diverso dall'area di autenticazione Kerberos, ovvero viene usato un suffisso UPN alternativo, è necessario usare l'opzione di entità di sicurezza aziendale (usare l'opzione -E con kinit e specificare il nome dell'entità di sicurezza nel formato user@federated-domain) quando si ottengono i ticket Kerberos. In questo modo, il driver può determinare correttamente sia il dominio federato che l'area di autenticazione Kerberos.
È possibile verificare che sia disponibile un ticket Kerberos appropriato controllando l'output del comando klist. Se il dominio federato corrisponde all'ambito Kerberos e al suffisso UPN, il nome principale avrà il formato user@realm. Se è diverso, il nome principale dovrebbe essere di formato user@federated-domain@realm.
Linux
In SUSE 11, la versione predefinita della libreria Kerberos 1.6.x non supporta l'opzione Principal di Enterprise necessaria per usare suffissi UPN alternativi. Per usare suffissi UPN alternativi con autenticazione integrata di Microsoft Entra, aggiornare la libreria Kerberos a 1.7 o versione successiva.
In Alpine Linux l'elemento libcurl predefinito non supporta l'autenticazione SPNEGO/Kerberos necessaria per l'autenticazione integrata di Microsoft Entra.
macOS
La libreria Kerberos di sistema kinit supporta il Principal enterprise con l'opzione --enterprise, ma esegue anche in modo implicito la canonicalizzazione dei nomi, che impedisce l'uso di suffissi UPN alternativi. Per usare suffissi UPN alternativi con l'autenticazione integrata di Microsoft Entra, installare una libreria Kerberos più recente tramite brew install krb5 e usare il relativo kinit con l'opzione -E come descritto in precedenza.