Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер mssql-python поддерживает зашифрованные соединения через безопасность транспортного уровня (TLS). Шифрование защищает данные при передаче между вашим приложением и SQL Server, а также предотвращает подслушивание и атаки противника посередине.
Шифрование подключения
Включение шифрования
Используйте ключевое Encrypt слово для управления шифрованием соединения:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Зашифровать значения ключевых слов
| Ценность | Описание |
|---|---|
yes |
Требуется шифрование и не работает, если сервер не поддерживает TLS. |
no |
Не шифрует соединение. Не рекомендуется для эксплуатации. |
strict |
Использует режим строгого шифрования TDS 8.0. Требуется SQL Server 2022 или новее. |
Important
База данных SQL Azure требует Encrypt=yes. Соединения без шифрования отклоняются.
Проверка сертификата
TrustServerCertificate
Контролирует, проверяет ли драйвер сертификат TLS сервера:
# 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;"
)
| Ценность | Описание |
|---|---|
no |
Проверяет сертификат относительно доверенных центров сертификации. Это значение — стандартная и рекомендуемая настройка. |
yes |
Доверяет любому сертификату и пропускает валидацию. Эта обстановка ненадёжна. |
Предостережение
Использование параметра TrustServerCertificate=yes в рабочей среде делает ваше приложение уязвимым для атак типа «злоумышленник посередине». Используйте эту настройку только для разработки с самоподписанными сертификатами.
Строгое шифрование TDS 8.0
SQL Server 2022 и более поздние версии поддерживают TDS 8.0 с строгим режимом шифрования:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
Строгий режим обеспечивает самый высокий уровень безопасности:
- Водитель устанавливает TLS до любого рукопожатия TDS.
- Требуется валидация сертификата, и вы не можете использовать
TrustServerCertificate=yes. - Этот режим обеспечивает высочайший уровень защиты от перехвата.
HostNameInCertificate
Когда имя сертификата сервера не совпадает с именем сервера подключения:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Это ключевое слово полезно, когда:
- Ваше приложение подключается через IP-адрес, а не через имя хоста.
- Сервер находится за балансировщиком нагрузки.
- Сертификат использует другое имя субъекта, отличное от имени сервера соединения.
Рекомендуемые конфигурации
База данных SQL Azure
База данных SQL Azure требует шифрования:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Локальный SQL Server (производство)
Для локального SQL Server с сертификатом, подписанным CA, оставите TrustServerCertificate=no так, чтобы драйвер проверял идентификатор сервера:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Разработка с самоподписанными сертификатами
Во время разработки с самоподписанными сертификатами установите TrustServerCertificate=yes так, чтобы пропускать проверку сертификатов:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 и более поздние версии с строгим режимом
Для TDS 8.0 используйте Encrypt=strict, который с самого начала шифрует всё подключение с помощью TLS:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Troubleshooting
"SSL-провайдер: неудача в проверке сертификатов"
Сертификат сервера не удалось проверить. Проведите следующие проверки:
- Проверьте, что сертификат принадлежит доверенному CA.
- Проверьте, действительна ли дата истечения сертификата.
- Проверьте, соответствует ли имя хоста сервера сертификату CN или SAN.
- Для разработки используйте
TrustServerCertificate=yes.
«TCP-провайдер: существующее соединение было насильно закрыто»
Серверу может потребоваться шифрование, но клиент его не запрашивал. Попробуйте выполнить следующие действия.
- Добавьте
Encrypt=yesв свою строка подключения. - Проверьте конфигурацию SQL Server для настройки Force Encryption.
«Цепочка сертификатов была выдана органом, которому не доверяют»
Корневой CA сертификата отсутствует в доверенном корневом хранилище системы. Проведите следующие проверки:
- Установите сертификат CA в доверенном корневом хранилище.
- Для Azure SQL убедитесь, что ваша система доверяет сертификатам Microsoft CA.
- Для разработки используйте
TrustServerCertificate=yes.
Соединение не работает при строгом шифровании
Строгий режим TDS 8.0 имеет следующие требования:
- Сервер должен запускать SQL Server 2022 или новее.
- Сервер должен иметь действительный, доверенный сертификат.
- Ты не можешь устанавливать
TrustServerCertificate=yes.
Если сервер не поддерживает TDS 8.0, используйте Encrypt=yes вместо него.