Dela via


TDS 8.0

gäller för: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

SQL Server 2022 (16.x), Azure SQL Database och Azure SQL Managed Instance stöder TDS (Tabular Data Stream) 8.0.

TDS- protokollet (Tabular Data Stream) är ett protokoll på programnivå som används av klienter för att ansluta till SQL Server. SQL Server använder TLS (Transport Layer Security) för att kryptera data som överförs över ett nätverk mellan en instans av SQL Server och ett klientprogram.

TDS är ett säkert protokoll, men i tidigare versioner av SQL Server kan kryptering inaktiveras eller inte aktiveras. För att uppfylla standarderna för obligatorisk kryptering vid användning av SQL Server introducerades en iteration av TDS-protokollet: TDS 8.0.

TLS-handskakningen föregår nu alla TDS-meddelanden och omsluter TDS-sessionen i TLS för att framtvinga kryptering, vilket gör TDS 8.0 justerat med HTTPS och andra webbprotokoll. Detta bidrar avsevärt till TDS-trafik hanterbarhet, eftersom standardnätverksenheter nu kan filtrera och på ett säkert sätt skicka SQL-frågor.

En annan fördel med TDS 8.0 jämfört med tidigare TDS-versioner är kompatibilitet med TLS 1.3 och TLS-standarder framöver. TDS 8.0 är också helt kompatibelt med TLS 1.2 och tidigare TLS-versioner.

Så här fungerar TDS

TDS-protokollet (Tabular Data Stream) är ett protokoll på programnivå som används för överföring av begäranden och svar mellan klienter och databasserversystem. I sådana system upprättar klienten vanligtvis en långvarig anslutning till servern. När anslutningen har upprättats med hjälp av ett protokoll på transportnivå används TDS-meddelanden för att kommunicera mellan klienten och servern.

Under TDS-sessionens livslängd finns det tre faser:

  • Initiering
  • Autentisering
  • Datautbyte

Kryptering förhandlas under den inledande fasen, men TDS-förhandling sker över en okrypterad anslutning. SQL Server-anslutningen ser ut så här för tidigare versioner av TDS 8.0:

TCP handshake ➡️ TDS prelogin (klartext) och svar (klartext) ➡️ TLS handshake ➡️ autentisering (krypterad) ➡️ datautbyte (kan vara krypterad eller okrypterad)

Med introduktionen av TDS 8.0 är SQL Server-anslutningarna följande:

TCP-handskakning ➡️ TLS-handskakning ➡️ TDS prelogin (krypterat) och svar (krypterat) ➡️ autentisering (krypterad) ➡️ datautbyte (krypterat)

Strikt anslutningskryptering

Om du vill använda TDS 8.0 har SQL Server 2022 (16.x) lagt till strict som ytterligare en anslutningskrypteringstyp till SQL Server-drivrutiner (Encrypt=strict). Om du vill använda strict anslutningskrypteringstyp laddar du ned den senaste versionen av drivrutinerna .NET, ODBC, OLE DB, JDBC, PHP och Python.

För att skydda mot en man-in-the-middle-attack med strict-anslutningskryptering kan användare inte ställa in alternativet TrustServerCertificate till true och lita på vilket certifikat som helst som servern har lämnat. I stället skulle användarna använda alternativet HostNameInCertificate för att ange certifikatet ServerName som ska vara betrott. Certifikatet som tillhandahålls av servern måste godkännas av certifikatverifieringen.

Funktioner som inte har stöd för att tvinga fram strikt kryptering

Alternativet Force Strict Encryption som lagts till med TDS 8.0 i SQL Server Network Configuration tvingar alla klienter att använda strict som krypteringstyp. Klienter eller funktioner utan strict anslutningskryptering kan inte ansluta till SQL Server.

Följande funktioner eller verktyg använder fortfarande tidigare version av drivrutiner som inte stöder TDS 8.0 och som sådana kanske inte fungerar med strict anslutningskryptering:

  • AlwaysOn-tillgänglighetsgrupper
  • AlwaysOn-redundansklusterinstans (FCI)
  • SQL Server-replikering
  • Loggöverföring
  • sqlcmd-verktyg
  • bcp-verktyg
  • SQL Server CEIP-tjänst
  • SQL Server Agent
  • Databas-e-post
  • Länkade servrar
  • Polybase-anslutningsprogram till SQL Server
  • SQL VSS-skrivare

Ytterligare ändringar av krypteringsegenskaper för anslutningssträngar

Följande tillägg läggs till i anslutningssträngar för kryptering:

Nyckelord Förvald Beskrivning
Encrypt falskt Befintligt beteende

När trueanvänder SQL Server TLS-kryptering för alla data som skickas mellan klienten och servern om servern har ett certifikat installerat. Identifierade värden är true, false, yesoch no. För mer information, se anslutningssträngssyntax.

Beteendeförändring

När det är inställt på strictanvänder SQL Server TDS 8.0 för alla data som skickas mellan klienten och servern.

När det är inställt på mandatory, trueeller yesanvänder SQL Server TDS 7.x med TLS/SSL-kryptering för alla data som skickas mellan klienten och servern om servern har ett certifikat installerat.

När anslutningen är inställd på optional, falseeller noanvänder den TDS 7.x och krypteras endast om det krävs av SQL Server.
TrustServerCertificate falskt Befintligt beteende

Ange till true för att ange att drivrutinen inte verifierar serverns TLS/SSL-certifikat. Om trueär serverns TLS/SSL-certifikat automatiskt betrott när kommunikationsskiktet krypteras med TLS.

Om falsevaliderar drivrutinen serverns TLS/SSL-certifikat. Om verifieringen av servercertifikatet misslyckas genererar drivrutinen ett fel och stänger anslutningen. Standardvärdet är false. Kontrollera att värdet som skickas till serverName exakt matchar Common Name (CN)- eller DNS-namnet i Subject Alternate Name i servercertifikatet för att en TLS/SSL-anslutning ska lyckas.

Beteendeförändring för Microsoft ODBC Driver 18 för SQL Server

Om Encrypt är inställt på strictanger den här inställningen platsen för certifikatet som ska användas för verifiering av servercertifikat (exakt matchning). Drivrutinen stöder PEM-, DER- och CER-filtillägg.

Om Encrypt är inställt på true eller falseoch egenskapen TrustServerCertificate är ospecificerad eller inställd på null, trueeller falseanvänder drivrutinen egenskapsvärdet ServerName på anslutnings-URL:en som värdnamn för att verifiera SQL Server TLS/SSL-certifikatet.
HostNameInCertificate null Värdnamnet som ska användas för att verifiera SQL Server TLS/SSL-certifikatet. Om egenskapen HostNameInCertificate är ospecificerad eller inställd på nullanvänder drivrutinen egenskapsvärdet ServerName som värdnamn för att verifiera SQL Server TLS/SSL-certifikatet.