Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il driver mssql-python supporta connessioni criptate tramite Transport Layer Security (TLS). La crittografia protegge i dati in transito tra la tua applicazione e SQL Server, e previene intercettazioni e attacchi avversari nel mezzo.
Crittografia della connessione
Abilitare la crittografia
Usa la Encrypt parola chiave per controllare la crittografia della connessione:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Cifrare i valori delle parole chiave
| Valore | Descrizione |
|---|---|
yes |
Richiede crittografia e fallisce se il server non supporta TLS. |
no |
Non cripta la connessione. Non consigliato per la produzione. |
strict |
Utilizza la modalità di crittografia rigorosa TDS 8.0. Richiede SQL Server 2022 o versioni successive. |
Importante
database SQL di Azure richiede Encrypt=yes. Le connessioni senza crittografia vengono rifiutate.
Convalida del certificato
TrustServerCertificate
Controlla se il driver convalida il certificato TLS del server:
# 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;"
)
| Valore | Descrizione |
|---|---|
no |
Valida il certificato rispetto alle autorità di certificazione affidabili. Questo valore è l'impostazione predefinita e consigliata. |
yes |
Si fida di qualsiasi certificato e salta la validazione. Questa impostazione è insicura. |
Attenzione
Impostare TrustServerCertificate=yes la produzione espone la tua applicazione ad attacchi avversari nel mezzo. Usa questa impostazione solo per lo sviluppo con certificati autofirmati.
Crittografia rigorosa TDS 8.0
SQL Server 2022 e successivi supportano TDS 8.0 con modalità di crittografia rigorosa:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
La modalità Strict offre il livello di sicurezza più alto:
- Il driver stabilisce una connessione TLS prima di qualsiasi handshake TDS.
- È richiesta la validazione del certificato e non puoi usare
TrustServerCertificate=yes. - Questa modalità offre il più alto livello di protezione contro l'intercettazione.
Nome host nel certificato
Quando il nome del certificato del server non corrisponde al nome del server di connessione:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Questa parola chiave è utile quando:
- La tua applicazione si collega tramite un indirizzo IP invece che tramite un nome host.
- Il server si trova dietro un bilanciatore di carico.
- Il certificato utilizza un nome di oggetto diverso da quello del server di connessione.
Configurazioni consigliate
Database SQL di Microsoft Azure
database SQL di Azure richiede la crittografia:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
SQL Server locale (produzione)
Per SQL Server on-premises con certificato firmato da CA, mantenere TrustServerCertificate=no in modo che il driver validi l'identità del server:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Sviluppo con certificati autofirmati
Durante lo sviluppo con certificati autofirmati, imposta TrustServerCertificate=yes per saltare la validazione dei certificati:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 e versioni successive con modalità rigorosa
Usa Encrypt=strict per TDS 8.0, che avvolge l'intera connessione in TLS fin dall'inizio:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Troubleshooting
"Fornitore SSL: Errore della validazione del certificato"
Il certificato server non poteva essere validato. Esegui questi controlli:
- Verifica che il certificato sia di una CA affidabile.
- Controlla che la data di scadenza del certificato sia valida.
- Verifica che il nome host del server corrisponda al certificato CN o SAN.
- Per lo sviluppo, utilizzare
TrustServerCertificate=yes.
"Provider TCP: Una connessione esistente è stata chiusa con la forza"
Il server potrebbe richiedere la crittografia, ma il client non l'ha richiesta. Provare questi passaggi:
- Aggiungi
Encrypt=yesalla tua stringa di connessione. - Controlla la configurazione di SQL Server per l'impostazione Force Crittografia.
"La catena di certificati è stata emessa da un'autorità non affidabile"
La root CA del certificato non si trova nella root store affidabile del sistema. Esegui questi controlli:
- Installa il certificato CA nello store root affidabile.
- Per Azure SQL, assicurati che il tuo sistema si fidi dei certificati CA di Microsoft.
- Per lo sviluppo, utilizzare
TrustServerCertificate=yes.
La connessione fallisce con crittografia rigorosa
La modalità rigorosa TDS 8.0 prevede questi requisiti:
- Il server deve eseguire SQL Server 2022 o versioni successive.
- Il server deve avere un certificato valido e affidabile.
- Non puoi impostare
TrustServerCertificate=yes.
Se il server non supporta TDS 8.0, usa Encrypt=yes invece.