Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel beschreibt aktuelle Änderungen zwischen Microsoft ODBC Driver 18 für SQL Server und Version 17. Verwenden Sie es, wenn Sie eine Treiberversion auswählen, eine Anwendung von Version 17 auf Version 18 upgraden oder eine Verbindungszeichenfolge auf beiden Versionen konsistent verhalten müssen.
Die meisten Anwendungen, die von Version 17 auf Version 18 aktualisieren, sind von einer einzigen Änderung betroffen: Verbindungen sind standardmäßig verschlüsselt. Wenn deine Anwendung nach dem Upgrade keine Verbindung mehr hat, lies zuerst das Standard-Verschlüsselungsverhalten .
Wähle Version 17 oder Version 18
Driver 18 ist die aktuelle Hauptversion. Driver 17 wird weiterhin unterstützt, aber Anwendungen, die ihn verwenden, benötigen weiterhin die neueste Minor-Version der Driver-17-Reihe, um Korrekturen zu erhalten. Für Support-Daten und Wartungsregeln siehe Support-Lebenszyklus.
| Scenario | Empfohlener Pfad |
|---|---|
| Neue Anwendung | Fang mit Fahrer 18 an. Konfigurieren Sie die Verschlüsselung und Zertifikatsvalidierung vor der Produktion. |
| Bestehende Driver 17-Anwendung | Installiere Treiber 18 neben Treiber 17, ändere den Treibernamen im Verbindungszeichenfolge oder DSN und setze explizit einEncrypt. Wenn die Zertifikatsvalidierung fehlschlägt, korrigiere das Serverzertifikat oder den Trust Store des Clients. |
Anwendung, die , HostnameInCertificate, , RetryExecoder ein anderes Treiber-18-Schlüsselwort benötigt Encrypt=Strict |
Verwende eine Treiber-18-Version, die diese Einstellung unterstützt. Driver 17 akzeptiert den Strict Wert für Encrypt nicht und erkennt die neuen Schlüsselwörter nicht. |
Eine Anwendung, die eine Zertifikatsdatei-Pinning mit ServerCertificate |
Verwenden Sie Driver 18.1 oder eine neuere Version mit Encrypt=Strict. Treiber 17 unterstützt diese Einstellung nicht. |
Das Ändern der Hauptversionen bedeutet in der Regel, den Treibernamen oder das von dir ausgewählte Paket zu ändern:
| Platform | Fahrer 17 | Fahrer 18 |
|---|---|---|
| Name des Verbindungsstring-Treibers | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Linux-Paketname | msodbcsql17 |
msodbcsql18 |
Zusammenfassung der Änderungen
Die Standard- und Validierungszeilen beschreiben gewöhnliche entfernte Verbindungen ohne DSN-EinstellungEncrypt, das SQL_COPT_SS_ENCRYPT Attribut oder die Windows Force Protocol Encryption Override. LocalDB ist kein entferntes TLS-Ziel.
| Bereich | Version 17 | Version 18 und spätere Versionen |
|---|---|---|
Standardeinstellung Encrypt |
no, sofern Authentication nicht auf einen anderen Wert als none gesetzt ist oder die Anwendung setzt SQL_COPT_SS_ACCESS_TOKEN; dann yes |
yes (18.0.1 und später) |
Encrypt Akzeptierte Werte |
yes, no |
yes, no, Mandatory, Optional, , Strict |
| Verschlüsselungsmodi | An oder an | Aus, an oder streng |
| Überprüfung des Serverzertifikats | Mit validiert das Zertifikat Encrypt=yes;TrustServerCertificate=no. Allein die servergeforderte Verschlüsselung wählt keine Validierung aus. |
Validiert standardmäßig. Im nicht-strengen Modus überspringt er TrustServerCertificate=yes die normale Validierung, auch wenn der Server eine Verschlüsselung benötigt. |
| Schlüsselwörter für Verbindungszeichenfolgen | Grundmenge | Basisset plus neue Schlüsselwörter |
Verschlüsselungsänderungen
Standardverschlüsselungsverhalten
Treiber 17 wird standardmäßig aktiviert Encrypt=no , es sei denn, das Authentication Schlüsselwort wird auf einen anderen none Wert gesetzt oder die Anwendung setzt das SQL_COPT_SS_ACCESS_TOKEN Attribut. Entweder ändert der Standard auf yes. Ein explizite Encrypt=no Formular schaltet die Verschlüsselung immer noch aus. Treiber 18.0.1 und später sind standardmäßig auf Encrypt=yes. Setzen Sie es explizit ein, Encrypt wenn Sie Versionen vergleichen.
Die vollständige Verschlüsselung der Verbindung schützt den Abfragetext und die Ergebnisse sowie den Login. Mit Encrypt=no, kann der Server weiterhin eine vollständige Verbindungsverschlüsselung benötigen. Wenn sowohl Client als auch Server die Verschlüsselung deaktivieren, verwendet die nicht-strenge Verhandlung nur eine Login-Verschlüsselung; dies schützt keine nachfolgenden Anwendungsdaten.
Mit Encrypt=yes;TrustServerCertificate=nowählen beide Treiber die normale Serverzertifikatsvalidierung. Wenn nur der Server eine vollständige Verbindungsverschlüsselung benötigt und TrustServerCertificate=no (der Standard), validiert Treiber 18 das Zertifikat. Im TrustServerCertificate=yes Außer-Strict-Modus überspringt Treiber 18 diese Validierung. Driver 17 validiert nicht allein wegen dieser Serveranforderung. Windows Force Protocol Encryption und interne Zertifikatsvalidierungs-Rückrufpfade werden von diesem Vergleich nicht abgedeckt.
Mit den Standard-Verschlüsselungseinstellungen kann ein Upgrade von Version 17 auf Version 18 ein nicht vertrauenswürdiges Serverzertifikat offenlegen. Wenn Version 18 das Zertifikat ablehnt, solltest du die Zertifikatskette und den Namen diagnostizieren, bevor die Authentifizierungseinstellungen geändert werden.
Lassen Sie Verschlüsselung und Serveridentitätsvalidierung aktiviert:
- Konfigurieren Sie ein gültiges Serverzertifikat und den Trust Store des Clients, sodass der Client seiner ausstellenden Zertifizierungsstelle vertraut. Verbinden Sie sich mit einem Namen im Zertifikat.
- Wenn du dich über ein Alias verbindest, setze
HostnameInCertificateeinen gültigen Namen im Serverzertifikat. Diese Einstellung repariert keine nicht vertrauenswürdige Zertifikatskette. - Für
Encrypt=Strict, unterstützenServerCertificateDriver 18.1 und spätere Versionen außerdem das Abgleichen des Serverzertifikats mit einer Zertifikatsdatei. Diese Einstellung pinnt ein Zertifikat; sie gibt keinen Hostnamen an. Überprüfen Sie die Einschränkungen in ODBC DSN und die Verbindungszeichenfolge-Schlüsselwörter, bevor Sie es verwenden.
Caution
Für eine isolierte Testumgebung wird Verschlüsselung angefordert, aber die Serveridentitätsvalidierung übersprungen, Encrypt=yes;TrustServerCertificate=yes wodurch die Verbindung für Angriffe von Adversary-in-the-Middle offen bleibt. Nutze es nicht als Produktionstrust-Reparatur. Im Strict-Modus wird dies TrustServerCertificate ignoriert.
Wenn eine bestehende Anwendung während eines kontrollierten Kompatibilitätstests die Standardeinstellung der Version 17 verlangt, siehe Verschlüsselungsverhalten der Version 17 wiederherstellen.
Encrypt=no Und Encrypt=optional reparieren Sie das Zertifikatsvertrauen nicht, sodass Anwendungsdaten unverschlüsselt bleiben.
Verschlüssele Werte
Version 17 akzeptiert nur yes und no. Version 18 und spätere Versionen akzeptieren diese Werte und fügen drei weitere hinzu:
| Wert | Entspricht | Behavior |
|---|---|---|
Mandatory |
yes |
Die Verbindung ist verschlüsselt. |
Optional |
no |
Fordert keine vollständige Verschlüsselung der Verbindung an. Der Server kann es trotzdem verlangen; reine Login-Verschlüsselung bietet keinen vollständigen Sitzungsschutz. |
Strict |
Nichts | Die Verbindung verwendet TDS-8.0-Verschlüsselung. Der Server muss TDS 8.0 unterstützen, wie zum Beispiel SQL Server 2022 und neuere Versionen. |
Strict hat kein Pendant zur Version 17. Es ist der einzige Wert, der TDS 8.0 auswählt, bei dem die Verschlüsselung vor dem Login-Austausch und nicht währenddessen ausgehandelt wird.
Verschlüsselungsverhalten von Version 17 wiederherstellen
Nach Überprüfung der Vertrauenskorrekturen verwenden Sie die folgende Einstellung nur für einen kontrollierten Kompatibilitätstest, der unverschlüsselte Anwendungsdaten erlaubt:
Encrypt=no
Treiber 18 akzeptiert Encrypt=optional diese Einstellung ebenfalls. Keiner der beiden Werte verhindert, dass der Server eine Verschlüsselung verlangt. Stellen Sie die beabsichtigte verschlüsselte Konfiguration nach dem Test wieder her; verwenden Sie deaktivierte Verschlüsselung nicht als Zertifikatsvertrauenslösung.
Upgradeprüfliste
- Inventar-Verbindungszeichen, DSNs, Paketreferenzen und Deployment-Skripte, die Treiber 17 auswählen.
- Installieren Sie Treiber 18 in einer Testumgebung, die mit der Produktion übereinstimmt.
- Ändern Sie das
DriverSchlüsselwort in jedem Verbindungszeichenfolge inODBC Driver 18 for SQL Server, und aktualisieren oder erstellen Sie jedes DSN neu, um Treiber 18 zu verwenden. Die Installation von Treiber 18 wechselt keine bestehenden Verbindungen, weil Verbindungen mit dem Namen Treiber 17 weiterhin Treiber 17 verwenden. - Legen Sie
Encryptexplizit fest.Encrypt=MandatoryVerwendung mit normaler Zertifikatsvalidierung. VerwendenEncrypt=StrictSie nur, wenn der Server TDS 8.0 unterstützt, wie zum Beispiel SQL Server 2022 und spätere Versionen. Für Server, die TDS 8.0 nicht unterstützen, verwendenEncrypt=MandatorySie . - Für die normale Validierung verbinden Sie sich mit
TrustServerCertificate=nound überprüfen Sie die vertrauenswürdige Kette und den akzeptierten Servernamen. Für Treiber 18.1 und spätere Versionen mit Strict-Datei-Pinning wird stattdessen die genaue Übereinstimmung und die Gültigkeitsdaten des Zertifikats überprüft;TrustServerCertificatewird im Strict-Modus ignoriert. - Führen Sie die Authentifizierungs-, Abfrage-, Transaktions-, Massenkopien-, Failover- und Wiederholungspfade der Anwendung aus.
- Überprüfen Sie Diagnosen auf Zertifikatsvalidierungsfehler, bevor Fehler als Authentifizierungs- oder Netzwerkfehler behandelt werden.
- Lass Treiber 17 installiert und behalte das Inventar von Schritt 1 an, bis die Validierung abgeschlossen ist, damit du zu Version 17 zurückkehren kannst.
Rückgang zu Version 17
Treiber 17 und Treiber 18 werden nebeneinander installiert, sodass du zurückrollen kannst, ohne Treiber 18 zu deinstallieren. Für Download- und Installationsdetails siehe Download ODBC Driver für SQL Server.
- Bestätigen Sie, dass Treiber 17 auf jedem Client noch installiert ist.
- Mit dem Inventar aus der Upgrade-Checkliste ändert man das
DriverSchlüsselwort in jedem Verbindungszeichenfolge zurück zuODBC Driver 17 for SQL Server. - Aktualisieren oder erstellen Sie jedes DSN neu, um Treiber 17 zu verwenden.
- Setze Paketreferenzen und Bereitstellungsskripte auf das Treiber-17-Paket zurück, wie zum Beispiel
msodbcsql17unter Linux. - Stelle die
EncryptWerteTrustServerCertificateder Anwendung mit Treiber 17 wieder her. Treiber 17 akzeptiert nuryesundnofürEncryptund erkennt Treiber 18-Schlüsselwörter wieHostnameInCertificateoderServerCertificate, daher werden Werte und für Treiber 18 hinzugefügte Schlüsselwörter entfernt. Ändern Sie die Alias-Schlüsselwörter zurück zu ihren Driver-17-Namen und ersetzenConnectTimeoutSie sie durch einenSQLSetConnectAttrAufruf, der setztSQL_ATTR_LOGIN_TIMEOUT. Für die Abbildung siehe New Verbindungszeichenfolge Keywords.
Validiere den Rollback, bevor du ihn als vollständig behandelst:
- Jede Verbindung meldet Fahrer 17. Ruf SQLGetInfo mit
SQL_DRIVER_VER; die Hauptversion ist17. - Die Authentifizierungs-, Abfrage-, Transaktions-, Massenkopie-, Failover- und Wiederholungspfade der Anwendung sind erfolgreich.
- Verbindungszeichenketten und DSNs enthalten keine
EncryptWerte oder Schlüsselwörter, die für Treiber 18 hinzugefügt wurden.
Neue Verbindungszeichenfolge-Schlüsselwörter
Version 18 fügt folgende Verbindungszeichenfolge-Schlüsselwörter hinzu, die Version 17 nicht erkennt. Einige davon sind neue Namen für Einstellungen, die Version 17 unter einem anderen Schlüsselwort oder Attribut unterstützt, das in der entsprechenden Spalte Version 17 aufgeführt ist.
| Keyword | Mindestversion | Purpose | Version 17-Äquivalent |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Kontrolliert, ob das Zusammenfügen eines Nullwerts null ergibt. | Nichts |
ConnectTimeout |
18,7 | Setzt die Login-Timeout in Sekunden. Wenn die Anwendung ebenfalls setzt SQL_ATTR_LOGIN_TIMEOUT, hat das Attribut Vorrang. |
SQL_ATTR_LOGIN_TIMEOUT Attribut, gesetzt mit SQLSetConnectAttr |
FailoverPartner |
18,7 | Spezifiziert den Failover-Partner für Datenbankspiegelung. Nur Windows. |
Failover_Partner Schlüsselwort |
GetDataExtensions |
18.0 | Kontrolliert, welche SQLGetData Erweiterungen der Treiber aktiviert. |
Nichts |
HostnameInCertificate |
18.0 | Spezifiziert den Hostnamen, der im TLS-Zertifikat des Servers validiert werden soll. | Nichts |
IpAddressPreference |
18.1 | Spezifiziert die IP-Adressfamilie, die der Treiber zuerst versucht. | Nichts |
LongAsMax |
18.0 | Mappt lange Datentypen auf ihre max Äquivalente. |
Nichts |
MultipleActiveResultSets |
18,7 | Ermöglicht mehrere aktive Ergebnismengen (MARS). Akzeptiert Yes oder No. |
MARS_Connection Schlüsselwort |
RetryExec |
18.1 | Konfiguriert die Regeln für Wiederholungen für fehlgeschlagene Abfragen. | Nichts |
ServerCertificate |
18.1 | Spezifiziert die Zertifikatsdatei, die mit dem Serverzertifikat abgeglichen werden soll, wenn verwendet Encrypt=Strictwird. |
Nichts |
WorkstationID |
18,7 | Spezifiziert den Arbeitsstationsnamen, der an den Server gesendet wird. |
WSID Schlüsselwort |
MultipleActiveResultSets, WorkstationID, und FailoverPartner sind Aliasnamen, die ODBC-Schlüsselwortnamen mit Eigenschaftsnamen ausrichten Microsoft.Data.SqlClient . Version 18 akzeptiert auch die älteren Namen. Details finden Sie unter Connection string Keyword-Unifikation und ConnectTimeout-Keyword.
Für die vollständige Schlüsselwortreferenz siehe ODBC DSN und Verbindungszeichenfolge Keywords.