Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De mssql-python-driver ondersteunt versleutelde verbindingen via Transport Layer Security (TLS). Versleuteling beschermt data die tussen je applicatie en SQL Server wordt verzonden en voorkomt afluisteren en aanvallen in het midden.
Verbindingsversleuteling
Versleuteling inschakelen
Gebruik het Encrypt trefwoord om de versleuteling van de verbinding te regelen:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Versleutel trefwoordwaarden
| Waarde | Beschrijving |
|---|---|
yes |
Vereist encryptie en faalt als de server geen TLS ondersteunt. |
no |
Het versleutelt de verbinding niet. Niet aanbevolen voor productie. |
strict |
Gebruikt TDS 8.0 strikte encryptiemodus. Vereist SQL Server 2022 of hoger. |
Important
Azure SQL Database vereist Encrypt=yes. Verbindingen zonder encryptie worden geweigerd.
Certificaatvalidatie
TrustServerCertificate
Bepaalt of de driver het TLS-certificaat van de server valideert:
# 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;"
)
| Waarde | Beschrijving |
|---|---|
no |
Valideert het certificaat tegen vertrouwde CA's. Deze waarde is de standaard- en aanbevolen instelling. |
yes |
Vertrouwt elk certificaat en slaat validatie over. Deze instelling is onveilig. |
Waarschuwing
Instellen TrustServerCertificate=yes in productie stelt je applicatie bloot aan aanvallen van de tegenstander in het midden. Gebruik deze instelling alleen voor ontwikkeling met zelfondertekende certificaten.
TDS 8.0 strikte encryptie
SQL Server 2022 en later ondersteunen TDS 8.0 met strikte encryptiemodus:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Strict-modus biedt het hoogste beveiligingsniveau:
- De chauffeur stelt TLS vast voordat er een TDS-handshake is.
- Certificaatvalidatie is vereist en je kan geen gebruik maken van
TrustServerCertificate=yes. - Deze modus biedt het hoogste niveau van bescherming tegen onderschepping.
HostnaamInCertificaat
Wanneer de certificaatnaam van de server niet overeenkomt met de naam van de verbindingsserver:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Dit trefwoord is nuttig wanneer:
- Je applicatie maakt verbinding via een IP-adres in plaats van een hostnaam.
- De server zit achter een load balancer.
- Het certificaat gebruikt een andere subjectnaam dan de naam van de verbindingsserver.
Aanbevolen configuraties
Azure SQL Database
Azure SQL Database vereist encryptie:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
On-premises SQL Server (productie)
Voor on-premises SQL Server met een door een CA ondertekend certificaat, behoud TrustServerCertificate=no zodat de driver de identiteit van de server verifieert:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Ontwikkeling met zelfondertekende certificaten
Tijdens de ontwikkeling met zelfondertekende certificaten, stel je TrustServerCertificate=yes in om certificaatvalidatie over te slaan:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 en latere versies met strikte modus
Gebruik Encrypt=strict voor TDS 8.0, waarbij de hele verbinding vanaf het begin in TLS wordt gewikkeld:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Probleemoplossingsproces
SSL-provider: validatie van certificaat mislukt
Het servercertificaat kon niet worden gevalideerd. Voer deze controles uit:
- Controleer of het certificaat van een vertrouwde CA komt.
- Controleer of de vervaldatum van het certificaat geldig is.
- Controleer of de hostnaam van de server overeenkomt met het certificaat CN of SAN.
- Gebruik
TrustServerCertificate=yesvoor ontwikkeling.
"TCP-provider: Een bestaande verbinding werd met geweld gesloten"
De server kan encryptie vereisen, maar de client heeft het niet opgevraagd. Voer de volgende stappen uit:
- Voeg toe
Encrypt=yesaan je verbindingsreeks. - Controleer de SQL Server-configuratie voor de instelling Force Encryption.
"De certificaatketen is uitgegeven door een autoriteit die niet wordt vertrouwd"
De root-CA van het certificaat zit niet in de vertrouwde rootopslag van het systeem. Voer deze controles uit:
- Installeer het CA-certificaat in de vertrouwde rootstore.
- Voor Azure SQL moet je ervoor zorgen dat je systeem de CA-certificaten van Microsoft vertrouwt.
- Gebruik
TrustServerCertificate=yesvoor ontwikkeling.
Verbinding faalt met strikte encryptie
TDS 8.0 strict mode heeft de volgende vereisten:
- De server moet SQL Server 2022 of later draaien.
- De server moet een geldig en vertrouwd certificaat hebben.
- Je kunt
TrustServerCertificate=yesniet instellen.
Als de server TDS 8.0 niet ondersteunt, gebruik Encrypt=yes dan in plaats daarvan.