Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le pilote mssql-python prend en charge les connexions chiffrées via la sécurité de la couche de transport (TLS). Le chiffrement protège les données en transit entre votre application et SQL Server, et empêche l’écoute clandestine ainsi que les attaques adversaires intermédiaires.
Chiffrement de la connexion
Activer le chiffrement
Utilisez le Encrypt mot-clé pour contrôler le chiffrement de la connexion :
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Chiffrer les valeurs des mots-clés
| Valeur | Description |
|---|---|
yes |
Nécessite un chiffrement et échoue si le serveur ne prend pas en charge TLS. |
no |
Ça ne chiffre pas la connexion. Non recommandé pour la production. |
strict |
Utilise le mode de chiffrement strict TDS 8.0. Nécessite SQL Server 2022 ou une version ultérieure. |
Important
Azure SQL Database nécessite Encrypt=yes. Les connexions sans chiffrement sont rejetées.
Validation de certificat
TrustServerCertificate
Contrôle si le pilote valide le certificat TLS du serveur :
# 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;"
)
| Valeur | Description |
|---|---|
no |
Valide le certificat auprès des autorités de certification de confiance. Cette valeur est le réglage par défaut et recommandé. |
yes |
Fait confiance à tout certificat et saute la validation. Ce paramètre n’est pas sécurisé. |
Caution
Mettre TrustServerCertificate=yes en production expose votre application à des attaques adversaires du milieu. N’utilisez ce paramètre que pour le développement avec des certificats auto-signés.
Chiffrement strict TDS 8.0
SQL Server 2022 et ultérieurs prennent en charge TDS 8.0 avec un mode de chiffrement strict :
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Le mode strict offre le niveau de sécurité le plus élevé :
- Le pilote établit TLS avant toute poignée de main TDS.
- La validation des certificats est requise, et vous ne pouvez pas utiliser
TrustServerCertificate=yes. - Ce mode offre le plus haut niveau de protection contre l’interception.
HostNameInCertificate
Lorsque le nom du certificat du serveur ne correspond pas au nom du serveur de connexion :
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Ce mot-clé est utile lorsque :
- Votre application se connecte via une adresse IP au lieu d’un nom d’hôte.
- Le serveur est derrière un équilibreur de charge.
- Le certificat utilise un nom de sujet différent du nom du serveur de connexion.
Configurations recommandées
Azure SQL Database
Azure SQL Database nécessite un chiffrement :
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
SQL Server sur site (production)
Pour SQL Server local avec un certificat signé par une autorité de certification, laissez TrustServerCertificate=no afin que le pilote valide l’identité du serveur :
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Développement avec certificats auto-signés
Lors du développement avec des certificats auto-signés, réglez TrustServerCertificate=yes pour éviter la validation des certificats :
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 et versions ultérieures avec mode strict
Utilisez Encrypt=strict pour TDS 8.0, qui encapsule toute la connexion en TLS dès le départ :
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Résolution des problèmes
« Fournisseur SSL : échec de validation de certificat »
Le certificat serveur n’a pas pu être validé. Effectuez ces vérifications :
- Vérifiez que le certificat provient d’une autorité de confiance (CA).
- Vérifiez que la date d’expiration du certificat est valide.
- Vérifiez que le nom d’hôte du serveur correspond au certificat CN ou SAN.
- Pour le développement, utilisez
TrustServerCertificate=yes.
« Fournisseur TCP : Une connexion existante a été fermée de force »
Le serveur peut nécessiter un chiffrement, mais le client ne l’a pas demandé. Procédez comme suit :
- Ajoute
Encrypt=yesà ta chaîne de connexion. - Vérifiez la configuration de SQL Server pour le paramètre Force Encryption.
« La chaîne de certificats a été délivrée par une autorité non digne de confiance »
La CA racine du certificat n’est pas dans le magasin racine de confiance du système. Effectuez ces vérifications :
- Installez le certificat de l’AC dans le magasin de certificats racines de confiance.
- Pour Azure SQL, assurez-vous que votre système fait confiance aux certificats de l'AC Microsoft.
- Pour le développement, utilisez
TrustServerCertificate=yes.
La connexion tombe en échec avec un chiffrement strict
Le mode strict TDS 8.0 a ces exigences :
- Le serveur doit exécuter SQL Server 2022 ou une version ultérieure.
- Le serveur doit posséder un certificat valide et fiable.
- Tu ne peux pas fixer
TrustServerCertificate=yes.
Si le serveur ne supporte pas TDS 8.0, utilisez Encrypt=yes à la place.