Condividi tramite


TDS 8.0

Si applica a: SQL Server 2022 (16.x) Database Azure SQLIstanza gestita di SQL di Azure

SQL Server 2022 (16.x), Database SQL di Azure e Istanza gestita di SQL di Azure supportano TDS (Tabular Data Stream) 8.0.

Il protocollo TDS (Tabular Data Stream) è un protocollo del livello applicazione usato dai client per connettersi a SQL Server. SQL Server usa Transport Layer Security (TLS) per crittografare i dati trasmessi attraverso una rete tra un'istanza di SQL Server e un'applicazione client.

TDS è un protocollo sicuro, ma nelle versioni precedenti di SQL Server la crittografia potrebbe essere disattivata o non abilitata. Per soddisfare gli standard di crittografia obbligatoria durante l'uso di SQL Server, è stata introdotta un'iterazione del protocollo TDS: TDS 8.0.

L'handshake TLS precede ora tutti i messaggi TDS, avvolgendo la sessione TDS in TLS per applicare la crittografia, allineando TDS 8.0 con HTTPS e altri protocolli web. Questo miglioramento contribuisce in modo significativo alla gestibilità del traffico TDS, poiché le appliance di rete standard sono ora in grado di filtrare e passare in modo sicuro le query SQL.

Un vantaggio per TDS 8.0 rispetto alle versioni precedenti di TDS è la compatibilità con TLS 1.3 e gli standard TLS da venire. TDS 8.0 è anche completamente compatibile con TLS 1.2 e versioni precedenti di TLS.

Come funziona TDS

Il protocollo Tabular Data Stream (TDS) è un protocollo a livello di applicazione usato per il trasferimento di richieste e risposte tra client e sistemi server di database. Il sistema client stabilisce in genere una connessione di lunga durata con il server. Dopo aver stabilito la connessione usando un protocollo a livello di trasporto, i messaggi TDS vengono scambiati per comunicare tra il client e SQL Server.

Per tutta la durata della sessione TDS, esistono tre fasi:

  • Inizializzazione
  • Autenticazione
  • Scambio di dati

La crittografia viene negoziata durante la fase iniziale, ma la negoziazione TDS avviene su una connessione non crittografata. La connessione di SQL Server è simile alla seguente per le versioni precedenti a TDS 8.0:

Handshake TCP ➡️ Pre-accesso TDS (testo non crittografato) e risposta (testo non crittografato) ➡️ Handshake TLS ➡️ Autenticazione (crittografata) ➡️ Scambio dati (può essere crittografato o non crittografato)

Con l'introduzione di TDS 8.0, le connessioni di SQL Server avvengono come indicato di seguito:

Handshake TCP ➡️ Handshake TLS ➡️ Pre-accesso TDS (crittografato) e risposta (crittografata) ➡️ Autenticazione (crittografata) ➡️ Scambio di dati (crittografato)

Matrice di compatibilità per le opzioni TDS, TLS, sistema operativo e crittografia

È possibile abilitare entrambe le versioni tls 1.2 e TLS 1.3 a livello di sistema operativo, che consente alle connessioni client a SQL Server di usare più versioni del protocollo TDS (TDS 7.x e 8.0). A seconda della versione del sistema operativo, TLS 1.2 e TLS 1.3 potrebbero essere abilitati per impostazione predefinita.

Solo TDS 7.x supporta la comunicazione non crittografata (facoltativa), TDS 8.0 non supporta questa operazione. TDS 7.x supporta la crittografia usando TLS fino alla versione 1.2. TDS 8.0 richiede la crittografia: tutto è sempre crittografato con TDS 8.0 (Encrypt=Strict). TDS 8.0 non ha requisiti minimi di versione TLS e supporta TLS 1.3. Il supporto di TLS 1.3 dipende dalla versione del sistema operativo. La tabella seguente riepiloga i vari scenari con le opzioni di crittografia e le versioni TDS e TLS corrispondenti.

Encrypt
opzione
Versione TLS abilitata Versione del sistema operativo Previsto
connessione
risultato
Note
Strict Solo TLS 1.3 (o versione successiva) Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.3 negoziato; TDS 8.0 attivato (Encrypt=Strict)
Strict TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.3 negoziato; TDS 8.0 attivato (Encrypt=Strict)
Strict Solo TLS 1.2 (o versioni precedenti) Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.2 negoziato; TDS 8.0 attivato (Encrypt=Strict)
Strict Solo TLS 1.2 (o versioni precedenti) Windows 10

Windows Server 2019/ 2016
Success TLS 1.2 negoziato; TDS 8.0 attivato (TLS 1.3 non disponibile)
Obbligatorio Solo TLS 1.3 (o versione successiva) Windows 11

Windows Server 2022 e versioni successive
Failure Encrypt=Mandatory non è compatibile con TLS 1.3 per TDS 8.0
Obbligatorio TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.2 negoziato; TDS 8.0 non attivato (Encrypt=Mandatory)
Obbligatorio Solo TLS 1.2 (o versioni precedenti) Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.2 negoziato; TDS 8.0 non attivato (Encrypt=Mandatory)
Obbligatorio Solo TLS 1.2 (o versioni precedenti) Windows 10

Windows Server 2019/ 2016
Success TLS 1.2 negoziato; TDS 8.0 non supportato in questo sistema operativo (usa TDS 7.x)
Opzionale Solo TLS 1.3 (o versione successiva) Windows 11

Windows Server 2022 e versioni successive
Failure Encrypt=Optional (false) è TDS 7.x, che non è compatibile con TLS 1.3.
Opzionale TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.3 negoziato; TDS 8.0 non attivato (Encrypt=Facoltativo)
Opzionale Solo TLS 1.2 (o versioni precedenti) Windows 11

Windows Server 2022 e versioni successive
Success TLS 1.2 negoziato; TDS 8.0 non attivato (Encrypt=Facoltativo)
Opzionale Solo TLS 1.2 (o versioni precedenti) Windows 10

Windows Server 2019/ 2016
Success TLS 1.2 negoziato; crittografia facoltativa; la connessione può essere stabilita
ottenere successo senza crittografia
Qualunque Solo TLS 1.3 (o versione successiva) Windows 10

Windows Server 2019/ 2016
Failure TLS 1.3 non supportato in questo sistema operativo

Per altre informazioni su come i client usano versioni TDS diverse, vedere la sezione Relativa all'utilizzo delle parole chiave nella sezione Modifiche alle proprietà di crittografia delle stringhe di connessione .

Supporto di SQL Server 2025

SQL Server 2025 (17.x) Preview introduce il supporto TDS 8.0 per i seguenti strumenti da riga di comando e funzionalità di SQL Server:

1Il supporto TDS 8.0 introduce modifiche di rilievo a queste funzionalità.

Crittografia della connessione rigorosa

Per usare TDS 8.0, SQL Server 2022 (16.x) aggiunto strict come opzione di crittografia di connessione aggiuntiva ai driver di SQL Server (Encrypt=strict). Per usare il strict tipo di crittografia della connessione, scaricare la versione più recente dei driver .NET, ODBC, OLE DB, JDBC, PHP e Python:

Per evitare un attacco man-in-the-middle con la crittografia della connessione strict, gli utenti non possono impostare l'opzione TrustServerCertificate su true e consentire ogni certificato fornito dal server. Gli utenti, invece, usano l'opzione HostNameInCertificate per specificare il certificato ServerName che deve essere considerato attendibile. Il certificato fornito dal server deve superare la convalida del certificato. Per altre informazioni sulla convalida dei certificati, vedere Requisiti dei certificati per SQL Server

Funzionalità che non supportano l'uso forzato della crittografia strict

L'opzione Force Strict Encryption aggiunta con TDS 8.0 nella configurazione della rete di SQL Server impone a tutti i client l'uso di strict come tipo di crittografia. I client o le funzionalità senza la crittografia della connessione strict non riescono a connettersi a SQL Server.

Le seguenti funzionalità o strumenti usano ancora la versione precedente dei driver che non supportano TDS 8.0 e, di conseguenza, potrebbero non funzionare con la crittografia della connessione strict:

  • Messaggi del database

Modifiche aggiuntive alle proprietà di crittografia della stringa di connessione

Le opzioni seguenti vengono aggiunte alle stringhe di connessione per crittografare la comunicazione:

Parola chiave Valore predefinito Descrizione
Encrypt falso Opzioni precedenti della stringa di connessione

Le opzioni valide sono
- trueo yes
- false, o no.
Per altre informazioni, vedere Sintassi della stringa di connessione. Quando true, SQL Server usa la crittografia TLS 1.2 per tutti i dati scambiati tra il client e il server se il server dispone di un certificato installato.

Opzioni più recenti per la stringa di connessione

Le opzioni valide sono
- strict
- mandatory, o trueo yes
- optional, o falseo no.

Se impostato su strict, SQL Server usa TDS 8.0 per tutti i dati scambiati tra il client e il server.

Quando è impostato su mandatory, true o yes, SQL Server usa TDS 7.x con crittografia TLS/SSL per tutti i dati inviati tra il client e il server se nel server è installato un certificato.

Quando è impostato su optional, false o no, la connessione usa TDS 7.x e viene crittografata solo se richiesto da SQL Server.
TrustServerCertificate falso Opzione stringa di connessione precedente

Se impostato su true (non consigliato), il driver non convalida il certificato TLS/SSL del server. Se true, il certificato TLS/SSL del server viene automaticamente considerato attendibile (ignorando la convalida) quando il livello di comunicazione viene crittografato tramite TLS.

Se false, il driver convalida il certificato TLS/SSL del server. Se la convalida del certificato del server ha esito negativo, il driver genera un errore e chiude la connessione. Il valore predefinito è false. Perché una connessione TLS/SSL riesca, accertarsi che il valore passato a serverName corrisponda esattamente al Common Name (CN) o al nome DNS nel Subject Alternate Name nel certificato del server.

Modifica del comportamento per Microsoft SQL Server ODBC Driver 18 e versioni successive

Se Encrypt è impostato su strict, questa impostazione specifica il percorso del certificato da usare per la convalida del certificato server (corrispondenza esatta). Il driver supporta le estensioni file PEM, DER e CER.

Se Encrypt è impostato su true o falsee la TrustServerCertificate proprietà non è specificata o impostata su null, trueo false, il driver usa il valore della ServerName proprietà nell'URL di connessione come nome host per convalidare il certificato TLS/SSL di SQL Server.
HostNameInCertificate null Nome host da usare per la convalida del certificato TLS/SSL di SQL Server. Se la HostNameInCertificate proprietà non è specificata o impostata su null, il driver usa il valore della ServerName proprietà come nome host per convalidare il certificato TLS/SSL di SQL Server.