Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladač mssql-python podporuje šifrovaná spojení prostřednictvím Transport Layer Security (TLS). Šifrování chrání data při přenosu mezi vaší aplikací a SQL Server a zabraňuje odposlechu a útokům typu "útočník uprostřed systému".
Šifrování připojení
Povolení šifrování
Použijte klíčové slovo Encrypt k ovládání šifrování spojení:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Šifrujte hodnoty klíčových slov
| Hodnota | Popis |
|---|---|
yes |
Vyžaduje šifrování a selže, pokud server TLS nepodporuje. |
no |
Nešifruje to spojení. Nedoporučuje se pro produkční prostředí. |
strict |
Používá režim TDS 8.0 s přísným šifrováním. Vyžaduje SQL Server 2022 nebo novější. |
Important
Azure SQL Database vyžaduje Encrypt=yes. Připojení bez šifrování jsou odmítána.
Ověření certifikátu
TrustServerCertificate
Ovládá, zda ovladač ověřuje TLS certifikát serveru:
# 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;"
)
| Hodnota | Popis |
|---|---|
no |
Ověřuje certifikát vůči důvěryhodným CA. Tato hodnota je výchozí a doporučené nastavení. |
yes |
Důvěřuje jakémukoliv certifikátu a vynechá validaci. Toto nastavení je nejisté. |
Caution
Spuštění TrustServerCertificate=yes do produkce vystavuje vaši aplikaci útokům protivníka uprostřed (adversary-in-the-middle). Toto nastavení používejte pouze pro vývoj s certifikáty podepsanými vlastními uživateli.
TDS 8.0 přísné šifrování
SQL Server 2022 a novější podporují TDS 8.0 s přísným režimem šifrování:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Přísný režim poskytuje nejvyšší úroveň bezpečnosti:
- Ovladač nastaví TLS před jakýmkoli TDS handshakem.
- Je vyžadováno ověření certifikátu a nelze použít
TrustServerCertificate=yes. - Tento režim poskytuje nejvyšší úroveň ochrany proti zachycení.
HostNameInCertificate
Když název certifikátu serveru neodpovídá názvu serveru připojení:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Toto klíčové slovo je užitečné, když:
- Vaše aplikace se připojuje přes IP adresu místo názvu hostitele.
- Server je za vyrovnávačem zátěže.
- Certifikát používá jiný název subjektu než název serveru spojení.
Doporučené konfigurace
Azure SQL Database
Azure SQL Database vyžaduje šifrování:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Místní SQL Server (produkční)
Pro on-premises SQL Server s certifikátem podepsaným CA udržujte TrustServerCertificate=no tak, aby ovladač ověřoval identitu serveru:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Vývoj se samopodepsanými certifikáty
Během vývoje s certifikáty podepsanými sami sebou nastavte TrustServerCertificate=yes vynechání validace certifikátu:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 a pozdější verze s přísným režimem
Použijte Encrypt=strict pro TDS 8.0, který od samého začátku zajišťuje šifrování celého připojení pomocí TLS:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Řešení problémů
"SSL poskytovatel: Selhání ověření certifikátu"
Certifikát serveru nešlo ověřit. Proveďte tyto kontroly:
- Ověřte, že certifikát pochází z důvěryhodné CA.
- Zkontrolujte, zda je datum expirace certifikátu platné.
- Ověřte, že serverové hostitelské jméno odpovídá certifikátu CN nebo SAN.
- Pro vývoj použijte
TrustServerCertificate=yes.
"TCP Provider: Existující spojení bylo násilně uzavřeno"
Server může vyžadovat šifrování, ale klient o něj nežádal. Vyzkoušejte tento postup:
- Přidejte
Encrypt=yesdo svého připojovací řetězec. - Zkontrolujte konfiguraci SQL Server pro nastavení Force Encryption.
"Řetězec certifikátů byl vydán autoritou, které není důvěryhodné"
Kořenová CA certifikátu není v důvěryhodném kořenovém úložišti systému. Proveďte tyto kontroly:
- Nainstalujte CA certifikát do důvěryhodného kořenového úložiště.
- U Azure SQL se ujistěte, že váš systém důvěřuje CA certifikátům Microsoft.
- Pro vývoj použijte
TrustServerCertificate=yes.
Spojení selže při přísném šifrování
Přísný režim TDS 8.0 má tyto požadavky:
- Server musí běžet na SQL Server 2022 nebo novějším.
- Server musí mít platný, důvěryhodný certifikát.
- Nemůžeš nastavit
TrustServerCertificate=yes.
Pokud server nepodporuje TDS 8.0, použijte Encrypt=yes místo toho.