Principali differenze di versione nel driver Microsoft ODBC per SQL Server

Questo articolo descrive le modifiche improvvise tra il driver ODBC 18 di Microsoft per SQL Server e la versione 17. Usalo quando scegli una versione del driver, aggiorni un'applicazione dalla versione 17 alla 18, o devi far funzionare una stringa di connessione in modo coerente su entrambe le versioni.

La maggior parte delle applicazioni che aggiornano dalla versione 17 alla versione 18 è influenzata da una singola modifica: le connessioni sono crittografate di default. Se la tua applicazione smette di connettersi dopo l'aggiornamento, leggi prima Comportamento di crittografia predefinito .

Scegli la versione 17 o la versione 18

Il driver 18 è la versione principale attuale. Il driver 17 rimane supportato, ma le applicazioni che lo utilizzano necessitano ancora dell'ultima versione minore della linea Driver 17 per ricevere correzioni. Per le date di supporto e le regole di servizio, vedi ciclo di vita del supporto.

Scenario Percorso consigliato
Nuova applicazione Inizia con il Driver 18. Configurare la crittografia e la validazione dei certificati prima della produzione.
Applicazione esistente per il Driver 17 Installa il Driver 18 accanto al Driver 17, cambia il nome del driver nella stringa di connessione o DSN, e imposta Encrypt esplicitamente. Se la validazione del certificato fallisce, correggi il certificato server o il trust store del client.
Applicazione che necessita Encrypt=Strictdi , HostnameInCertificate, RetryExec, o un'altra parola chiave Driver 18 Usa una versione Driver 18 che supporti questa impostazione. Il driver 17 non accetta il Strict valore di Encrypt e non riconosce le nuove parole chiave.
Applicazione che necessita di pinning del file certificato con ServerCertificate Usa il driver 18.1 o una versione successiva con Encrypt=Strict. Il driver 17 non supporta questa impostazione.

Cambiare versione principale di solito significa cambiare il nome del driver o il pacchetto che scegli:

Platform Pilota 17 Pilota 18
Nome driver della stringa di connessione ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Nome del pacchetto Linux msodbcsql17 msodbcsql18

Riepilogo delle modifiche

Le righe predefinite e di validazione descrivono connessioni remote ordinarie senza un'impostazione DSNEncrypt, l'attributo SQL_COPT_SS_ENCRYPT o l'override di Windows Force Protocol Encryption. LocalDB non è un target remoto TLS.

Area Versione 17 Versione 18 e versioni successive
Impostazione predefinita Encrypt no, a meno che Authentication non sia impostato a un valore diverso da none o l'applicazione imposte SQL_COPT_SS_ACCESS_TOKEN; allora yes yes (18.0.1 e successive)
Encrypt Valori accettati yes, no yes, no, Mandatory, Optional, Strict
Modalità di crittografia A intermittenza o a scena Spenta, accesa o rigida
Convalida certificato del server Con Encrypt=yes;TrustServerCertificate=no, valida il certificato. La sola crittografia richiesta dal server non seleziona la validazione. Valida di default. Nelle modalità non Strict, TrustServerCertificate=yes si salta la validazione normale, anche quando il server richiede crittografia.
Parole chiave per le stringhe di connessione Set base Set base più nuove parole chiave

Modifiche alla crittografia

Comportamento di crittografia predefinito

Il driver 17 è predefinito Encrypt=no a meno che la Authentication parola chiave non sia impostata a un valore diverso da none quello o l'applicazione non imposti l'attributo SQL_COPT_SS_ACCESS_TOKEN . Ognuno di questi cambia il valore predefinito in yes. Un alambicare esplicito Encrypt=no disattiva la crittografia. Il driver 18.0.1 e successivi predefinito su Encrypt=yes. Imposta Encrypt esplicitamente quando confronti le versioni.

La crittografia a connessione completa protegge il testo e i risultati della query così come l'accesso al cliente. Con Encrypt=no, il server può comunque richiedere una crittografia completa della connessione. Quando sia client che server scelgono la crittografia disattivata, la negoziazione non Strict utilizza la crittografia solo login; questo non protegge i dati delle applicazioni successive.

Con , entrambi i driver selezionano Encrypt=yes;TrustServerCertificate=nola normale validazione del certificato server. Se solo il server richiede la crittografia completa della connessione e TrustServerCertificate=no (predefinito), il Driver 18 valida il certificato. Con TrustServerCertificate=yes la modalità Strict esterna, il Driver 18 salta quella validazione. Il driver 17 non si convalida solo a causa di quel requisito del server. La crittografia del protocollo Windows Force e i percorsi interni di validazione dei certificati non sono coperti da questo confronto.

Con le impostazioni di crittografia predefinite, l'aggiornamento dalla versione 17 alla versione 18 può esporre un certificato server non fidabile. Se la versione 18 rifiuta il certificato, diagnostica la catena di certificati e il nome prima di modificare le impostazioni di autenticazione.

Mantieni attivata la crittografia e la validazione dell'identità del server:

  • Configurare un certificato server valido e il trust store del client in modo che il client si fidi dell'autorità di certificazione emittente. Connettiti usando un nome nel certificato.
  • Se ti connetti tramite un alias, imposta HostnameInCertificate un nome valido nel certificato server. Questa impostazione non ripara una catena di certificati non affidabile.
  • Per Encrypt=Strict, il driver 18.1 e versioni successive supportano ServerCertificate anche il confronto del certificato server con un file di certificato. Questa impostazione fissa un certificato; non specifica un nome host. Rivedi le sue restrizioni in ODBC DSN e nelle parole chiave stringa di connessione prima di usarla.

Caution

Per un ambiente di test isolato, Encrypt=yes;TrustServerCertificate=yes richiede la crittografia ma salta la validazione dell'identità del server, lasciando la connessione aperta ad attacchi avversari nel mezzo. Non usarlo come riparazione di trust in produzione. In modalità Severo, TrustServerCertificate viene ignorato.

Se un'applicazione esistente richiede il valore predefinito della versione 17 durante un test di compatibilità controllato, vedi Ripristina comportamento di crittografia della versione 17. Encrypt=no E Encrypt=optional non riparare la fiducia dei certificati e può lasciare i dati dell'applicazione non criptati.

Valori di crittografia

La versione 17 accetta solo yes e no. La versione 18 e le versioni successive accettano quei valori e ne aggiungono altri tre:

Value Equivalente a Behavior
Mandatory yes La connessione è criptata.
Optional no Non richiede la crittografia della connessione completa. Il server può comunque richiederlo; la crittografia solo di login non è protezione per tutta la sessione.
Strict Nessuno La connessione utilizza la crittografia TDS 8.0. Il server deve supportare TDS 8.0, come SQL Server 2022 e versioni successive.

Strict non ha equivalenti alla versione 17. È l'unico valore che seleziona TDS 8.0, dove la crittografia viene negoziata prima dello scambio di login piuttosto che durante esso.

Ripristina il comportamento di crittografia della versione 17

Dopo aver esaminato le correzioni di trust, usa la seguente impostazione solo per un test di compatibilità controllato che consente dati applicativi non criptati:

Encrypt=no

Anche il driver 18 accetta Encrypt=optional questa impostazione. Nessuno dei due valori impedisce al server di richiedere la crittografia. Ripristinare la configurazione criptata prevista dopo il test; non usare la crittografia disabilitata come rimedio di fiducia nel certificato.

Checklist di aggiornamento

  1. Stringhe di connessione di inventario, DSN, riferimenti ai package e script di distribuzione che selezionano il Driver 17.
  2. Installa il driver 18 in un ambiente di test che corrisponda alla produzione.
  3. Cambia la Driver parola chiave in ogni stringa di connessione in ODBC Driver 18 for SQL Server, e aggiorna o ricrea ogni DSN per usare il Driver 18. L'installazione del Driver 18 non cambia le connessioni esistenti, perché le connessioni che nominano il Driver 17 continuano a usare il Driver 17.
  4. Impostare Encrypt in modo esplicito. Da usare Encrypt=Mandatory con la normale validazione dei certificati. Utilizzare Encrypt=Strict solo quando il server supporta TDS 8.0, come SQL Server 2022 e versioni successive. Per i server che non supportano TDS 8.0, usa Encrypt=Mandatory.
  5. Per una validazione normale, connettiti e TrustServerCertificate=no verifica la catena di fiducia e il nome del server accettato. Per il driver 18.1 e versioni successive con pinning Strict file, verificare invece la corrispondenza esatta dei certificati e le date di validità; TrustServerCertificate viene ignorato in modalità Strict.
  6. Esegui i percorsi di autenticazione, interrogazione, transazione, copia in massa, failover e retry dell'applicazione.
  7. Esaminare la diagnostica per errori di validazione dei certificati prima di trattare i guasti come errori di autenticazione o di rete.
  8. Tieni installato il driver 17 e conserva l'inventario dal primo passaggio fino al completamento della validazione, così puoi tornare alla versione 17.

Torna indietro alla versione 17

Il driver 17 e il driver 18 si installano fianco a fianco, quindi puoi tornare indietro senza disinstallare il driver 18. Per dettagli su download e installazione, consulta Download ODBC Driver for SQL Server.

  1. Conferma che il Driver 17 sia ancora installato su ogni client.
  2. Utilizzando l'inventario della checklist di aggiornamento, cambia la Driver parola chiave in ogni stringa di connessione tornando a ODBC Driver 17 for SQL Server.
  3. Aggiorna o ricrea ogni DSN per usare il Driver 17.
  4. Ripristinare i riferimenti ai pacchetti e agli script di distribuzione al pacchetto Driver 17, come msodbcsql17 su Linux.
  5. Ripristina i Encrypt valori e TrustServerCertificate che l'applicazione ha usato con il Driver 17. Il Driver 17 accetta solo yes e no per Encrypt e non riconosce le parole chiave del Driver 18 come HostnameInCertificate o ServerCertificate, quindi rimuovere i valori e le parole chiave aggiunte per il Driver 18. Cambia le parole chiave degli alias tornando ai nomi del Driver 17 e sostituisci ConnectTimeout con una SQLSetConnectAttr chiamata che imposta SQL_ATTR_LOGIN_TIMEOUT. Per la mappatura, vedi Nuove parole chiave stringa di connessione.

Valida il rollback prima di considerarlo completo:

  • Ogni connessione segnala il Driver 17. Chiama SQLGetInfo con SQL_DRIVER_VER; la versione principale è 17.
  • I percorsi di autenticazione, interrogazione, transazione, copia in massa, failover e retry dell'applicazione hanno successo.
  • Le stringhe di connessione e i DSN non contengono valori Encrypt o parole chiave aggiunti per il Driver 18.

Nuove parole chiave per stringa di connessione

La versione 18 aggiunge le seguenti parole chiave di stringa di connessione, che la versione 17 non riconosce. Alcuni di questi sono nuovi nomi per impostazioni supportate dalla versione 17 con una parola chiave o attributo diverso, elencati nella colonna equivalente della versione 17 .

Keyword Versione minima Purpose Equivalente alla versione 17
ConcatNullYieldsNull 18.6 Determina se la concatenazione di un valore nullo produca nulla. Nessuno
ConnectTimeout 18.7 Imposta il timeout di login in pochi secondi. Se l'applicazione imposta SQL_ATTR_LOGIN_TIMEOUTanche , l'attributo ha la precedenza. SQL_ATTR_LOGIN_TIMEOUT attributo, impostato con SQLSetConnectAttr
FailoverPartner 18.7 Specifica il partner di failover per il mirroring del database. Solo per Windows. Failover_Partner parola chiave
GetDataExtensions 18,0 Controlla quali SQLGetData estensioni il driver abilita. Nessuno
HostnameInCertificate 18,0 Specifica il nome host da validare nel certificato TLS del server. Nessuno
IpAddressPreference 18.1 Specifica la famiglia di indirizzi IP che il driver prova per primo. Nessuno
LongAsMax 18,0 Mappa i tipi di dati lunghi ai loro max equivalenti. Nessuno
MultipleActiveResultSets 18.7 Abilita i Multiple Active Result Set (MARS). Accetta Yes o No. MARS_Connection parola chiave
RetryExec 18.1 Configura le regole di ritentativo per query fallite. Nessuno
ServerCertificate 18.1 Specifica che il file del certificato corrisponda al certificato server quando si utilizza Encrypt=Strict. Nessuno
WorkstationID 18.7 Specifica il nome della workstation inviato al server. WSID parola chiave

MultipleActiveResultSets, WorkstationID, e FailoverPartner sono alias che allineano i nomi delle parole chiave ODBC con Microsoft.Data.SqlClient i nomi delle proprietà. La versione 18 accetta anche i nomi più vecchi. Per dettagli, vedi Unification delle parole chiave Stringhe di connessione e ConnectTimeout.

Per il riferimento completo delle parole chiave, vedi ODBC DSN e le parole chiave stringa di connessione.