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.
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
HostnameInCertificateun 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 supportanoServerCertificateanche 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
- Stringhe di connessione di inventario, DSN, riferimenti ai package e script di distribuzione che selezionano il Driver 17.
- Installa il driver 18 in un ambiente di test che corrisponda alla produzione.
- Cambia la
Driverparola chiave in ogni stringa di connessione inODBC 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. - Impostare
Encryptin modo esplicito. Da usareEncrypt=Mandatorycon la normale validazione dei certificati. UtilizzareEncrypt=Strictsolo quando il server supporta TDS 8.0, come SQL Server 2022 e versioni successive. Per i server che non supportano TDS 8.0, usaEncrypt=Mandatory. - Per una validazione normale, connettiti e
TrustServerCertificate=noverifica 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à;TrustServerCertificateviene ignorato in modalità Strict. - Esegui i percorsi di autenticazione, interrogazione, transazione, copia in massa, failover e retry dell'applicazione.
- Esaminare la diagnostica per errori di validazione dei certificati prima di trattare i guasti come errori di autenticazione o di rete.
- 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.
- Conferma che il Driver 17 sia ancora installato su ogni client.
- Utilizzando l'inventario della checklist di aggiornamento, cambia la
Driverparola chiave in ogni stringa di connessione tornando aODBC Driver 17 for SQL Server. - Aggiorna o ricrea ogni DSN per usare il Driver 17.
- Ripristinare i riferimenti ai pacchetti e agli script di distribuzione al pacchetto Driver 17, come
msodbcsql17su Linux. - Ripristina i
Encryptvalori eTrustServerCertificateche l'applicazione ha usato con il Driver 17. Il Driver 17 accetta soloyesenoperEncrypte non riconosce le parole chiave del Driver 18 comeHostnameInCertificateoServerCertificate, 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 sostituisciConnectTimeoutcon unaSQLSetConnectAttrchiamata che impostaSQL_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
Encrypto 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.