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.

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 .

Riepilogo delle modifiche

Area Versione 17 Versione 18 e versioni successive
Impostazione predefinita Encrypt no yes
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 Non succede a meno che tu non richieda la crittografia Succede di default, perché la crittografia è attiva di default
Parole chiave per le stringhe di connessione Set base Set base più nuove parole chiave

Modifiche alla crittografia

Comportamento di crittografia predefinito

Nella versione 17, le connessioni non sono criptate a meno che tu non chieda la crittografia o che il server non la richieda. Nella versione 18 e successive, le connessioni sono crittografate di default.

Poiché il driver convalida il certificato del server ogni volta che cripta una connessione, un'applicazione che si collega a un server con un certificato autofirmato o altrimenti non affidabile si collega con successo con la versione 17 e fallisce con la versione 18. Il guasto è un errore di validazione del certificato, non un errore di autenticazione.

Hai tre modi per risolverlo, elencati dal più al meno sicuro:

  • Installa un certificato sul server di cui il client si fida. Questa opzione è quella consigliata, ed è l'unica che mantiene sia la crittografia che la validazione.
  • Mantieni attivo la crittografia e indica al driver quale nome validare, impostando HostNameInCertificate o ServerCertificate.
  • Disattiva la crittografia per ripristinare il valore predefinito della versione 17, aggiungendo Encrypt=no alla stringa di connessione.

Caution

Impostare TrustServerCertificate=yes mantiene la connessione crittografata ma disabilita la validazione dei certificati, il che lascia la connessione aperta ad attacchi di tipo avversario nel mezzo. Preferisci un certificato affidabile.

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 La connessione non è criptata a meno che il server non lo richieda.
Strict Nessuno La connessione utilizza la crittografia TDS 8.0.

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

Per ripristinare il comportamento predefinito della versione 17, imposta Encrypt esplicitamente:

Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;

Impostare esplicitamente il valore è vantaggioso anche nella versione 17, perché fa sì che la stringa di connessione si comporti allo stesso modo su entrambe le versioni.

Nuove parole chiave per stringa di connessione

La versione 18 aggiunge le seguenti parole chiave stringa di connessione, che la versione 17 non riconosce:

Keyword Purpose
ConcatNullYieldsNull Determina se la concatenazione di un valore nullo produca nulla.
GetDataExtensions Controlla quali SQLGetData estensioni il driver abilita.
HostNameInCertificate Specifica il nome host da validare nel certificato TLS del server.
IpAddressPreference Specifica la famiglia di indirizzi IP che il driver prova per primo.
LongAsMax Mappa i tipi di dati lunghi ai loro max equivalenti.
RetryExec Configura le regole di ritentativo per query fallite.
ServerCertificate Specifica il percorso verso un file certificato contro cui convalidare il server.

Le singole parole chiave sono state introdotte in diverse versioni della versione 18. Per la release che ha introdotto ogni parola chiave e per il riferimento completo alla parola chiave, vedi ODBC DSN e le parole chiave stringa di connessione.