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.
Der mssql-python-Treiber unterstützt verschlüsselte Verbindungen über Transport Layer Security (TLS). Die Verschlüsselung schützt Daten, die zwischen Ihrer Anwendung und dem SQL Server übertragen werden, und verhindert Abhör- und Gegner-in-der-Mitte-Angriffe.
Verbindungsverschlüsselung
Aktivieren der Verschlüsselung
Verwenden Sie das Encrypt Schlüsselwort zur Steuerung der Verbindungsverschlüsselung:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Schlüsselwortwerte verschlüsseln
| Wert | Beschreibung |
|---|---|
yes |
Erfordert Verschlüsselung und scheitert, wenn der Server kein TLS unterstützt. |
no |
Verschlüsselt die Verbindung nicht. Nicht für die Produktion empfohlen. |
strict |
Verwendet den TDS 8.0 strengen Verschlüsselungsmodus. Benötigt SQL Server 2022 oder neuer. |
Important
Azure SQL-Datenbank benötigt Encrypt=yes. Verbindungen ohne Verschlüsselung werden abgelehnt.
Zertifikatüberprüfung
TrustServerCertificate
Kontrolliert, ob der Treiber das TLS-Zertifikat des Servers validiert:
# Validate server certificate (recommended for production)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
# Skip certificate validation (development only)
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
| Wert | Beschreibung |
|---|---|
no |
Validiert das Zertifikat gegen vertrauenswürdige CAs. Dieser Wert ist die Standard- und empfohlene Einstellung. |
yes |
Vertraut jedem Zertifikat und überspringt die Validierung. Dieses Setting ist unsicher. |
Caution
Die Einstellung TrustServerCertificate=yes im Produktivbetrieb macht Ihre Anwendung anfällig für Adversary-in-the-Middle-Angriffe. Verwenden Sie diese Einstellung nur für die Entwicklung mit selbstsignierten Zertifikaten.
TDS 8.0 strenge Verschlüsselung
SQL Server 2022 und später unterstützen TDS 8.0 mit strengem Verschlüsselungsmodus:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Der strenge Modus bietet das höchste Sicherheitsniveau:
- Der Treiber stellt eine TLS-Verbindung her, bevor ein TDS-Handshake erfolgt.
- Die Validierung des Zertifikats ist erforderlich, und Sie können
TrustServerCertificate=yesnicht verwenden. - Dieser Modus bietet das höchste Maß an Schutz vor dem Abfangen.
HostNameInCertificate
Wenn der Zertifikatsname des Servers nicht mit dem Verbindungsservernamen übereinstimmt:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Dieses Schlüsselwort ist nützlich, wenn:
- Ihre Anwendung verbindet sich über eine IP-Adresse statt über einen Hostnamen.
- Der Server befindet sich hinter einem Load Balancer.
- Das Zertifikat verwendet einen anderen Subjektnamen als der Name des Verbindungservers.
Empfohlene Konfigurationen
Azure SQL-Datenbank
Azure SQL-Datenbank erfordert Verschlüsselung:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
On-premises SQL Server (Produktion)
Für lokale SQL Server-Instanzen mit einem CA-signierten Zertifikat behalten Sie TrustServerCertificate=no bei, damit der Treiber die Serveridentität überprüft:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Entwicklung mit selbstsignierten Zertifikaten
Legen Sie während der Entwicklung mit selbstsignierten Zertifikaten TrustServerCertificate=yes fest, um die Zertifikatsvalidierung zu überspringen:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 und spätere Versionen mit Strict-Mode
Verwendung Encrypt=strict für TDS 8.0, das die gesamte Verbindung von Anfang an in TLS umwickelt:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Problembehandlung
"SSL-Anbieter: Zertifikatsvalidierungsfehler"
Das Serverzertifikat konnte nicht validiert werden. Führen Sie diese Prüfungen durch:
- Überprüfen Sie, ob das Zertifikat von einer vertrauenswürdigen CA stammt.
- Überprüfen Sie, ob das Ablaufdatum des Zertifikats gültig ist.
- Überprüfen Sie, ob der Server-Hostname mit dem Zertifikat CN oder SAN übereinstimmt.
- Verwenden Sie
TrustServerCertificate=yesfür die Entwicklung.
"TCP-Anbieter: Eine bestehende Verbindung wurde gewaltsam geschlossen"
Der Server könnte eine Verschlüsselung verlangen, aber der Client hat sie nicht angefordert. Führen Sie die folgenden Schritte aus:
- Füge
Encrypt=yesdeiner Verbindungszeichenfolge hinzu. - Überprüfe die SQL Server-Konfiguration für die Erzwing-Verschlüsselung-Einstellung.
"Die Zertifikatskette wurde von einer nicht vertrauenswürdigen Behörde ausgestellt"
Die Root-CA des Zertifikats befindet sich nicht im vertrauenswürdigen Root-Store des Systems. Führen Sie diese Prüfungen durch:
- Installiere das CA-Zertifikat im vertrauenswürdigen Root-Store.
- Für Azure SQL solltest du sicherstellen, dass dein System den CA-Zertifikaten von Microsoft vertraut.
- Verwenden Sie
TrustServerCertificate=yesfür die Entwicklung.
Die Verbindung schlägt bei strikter Verschlüsselung fehl
Der strenge TDS-8.0-Modus hat folgende Anforderungen:
- Der Server muss SQL Server 2022 oder später ausführen.
- Der Server muss über ein gültiges, vertrauenswürdiges Zertifikat verfügen.
- Du kannst nicht setzen
TrustServerCertificate=yes.
Wenn der Server TDS 8.0 nicht unterstützt, nutze Encrypt=yes stattdessen.