Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O driver mssql-python suporta conexões criptografadas por meio da Segurança da Camada de Transporte (TLS). A criptografia protege os dados em trânsito entre sua aplicação e o SQL Server, e previne escutas clandestinas e ataques de adversário no meio.
Criptografia de conexão
Habilitar criptografia
Use a Encrypt palavra-chave para controlar a criptografia da conexão:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Criptografar valores de palavras-chave
| Valor | Descrição |
|---|---|
yes |
Requer criptografia e falha se o servidor não suportar TLS. |
no |
Não criptografa a conexão. Não recomendado para produção. |
strict |
Utiliza o modo de criptografia estrita TDS 8.0. Requer SQL Server 2022 ou versões posteriores. |
Importante
Banco de Dados SQL do Azure requer Encrypt=yes. Conexões sem criptografia são rejeitadas.
Validação de certificado
Certificado de Servidor Confiável
Controle se o driver valida o certificado TLS do servidor:
# 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;"
)
| Valor | Descrição |
|---|---|
no |
Valida o certificado contra as CAs confiáveis. Esse valor é a configuração padrão e recomendada. |
yes |
Confia em qualquer certificado e pula a validação. Essa configuração é insegura. |
Cuidado
Colocar TrustServerCertificate=yes em produção expõe sua aplicação a ataques de adversário no meio. Use essa configuração apenas para desenvolvimento com certificados autoassinados.
Criptografia estrita TDS 8.0
SQL Server 2022 e versões posteriores suportam TDS 8.0 com modo de criptografia rigorosa:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
O modo estrito oferece o mais alto nível de segurança:
- O driver estabelece o protocolo TLS antes de qualquer handshake do TDS.
- A validação de certificado é necessária, e você não pode usar
TrustServerCertificate=yes. - Esse modo oferece o mais alto nível de proteção contra interceptação.
HostNameInCertificate
Quando o nome do certificado do servidor não coincide com o nome do servidor de conexão:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Essa palavra-chave é útil quando:
- Sua aplicação se conecta por um endereço IP em vez de um nome de host.
- O servidor está atrás de um balanceador de carga.
- O certificado usa um nome de assunto diferente do nome do servidor de conexão.
Configurações recomendadas
Banco de Dados SQL do Azure
Banco de Dados SQL do Azure requer criptografia:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
SQL Server local (produção)
Para SQL Server on-premises com certificado assinado por uma CA, mantenha TrustServerCertificate=no para que o driver valide a identidade do servidor:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
Desenvolvimento com certificados autoassinados
Durante o desenvolvimento com certificados autoassinados, defina TrustServerCertificate=yes para pular a validação de certificados:
conn = mssql_python.connect(
"Server=localhost;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=yes;"
)
SQL Server 2022 e versões posteriores com modo estrito
Use Encrypt=strict para TDS 8.0, que envolve toda a conexão no TLS desde o início:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Solução de problemas
"Provedor SSL: Falha na validação de certificado"
O certificado do servidor não pôde ser validado. Faça estas verificações:
- Verifique se o certificado é de uma CA confiável.
- Verifique se a data de validade do certificado é válida.
- Verifique se o nome do host do servidor corresponde ao certificado CN ou SAN.
- Para desenvolvimento, use
TrustServerCertificate=yes.
"Provedor TCP: Uma conexão existente foi fechada à força"
O servidor pode exigir criptografia, mas o cliente não solicitou. Experimente estes passos:
- Adicione
Encrypt=yesà sua cadeia de conexão. - Verifique a configuração do SQL Server da opção Forçar Criptografia.
"A cadeia de certificados foi emitida por uma autoridade que não é confiável"
A CA raiz do certificado não está no repositório de raízes confiáveis do sistema. Faça estas verificações:
- Instale o certificado da CA na loja raiz confiável.
- Para SQL do Azure, certifique-se de que seu sistema confie nos certificados de CA da Microsoft.
- Para desenvolvimento, use
TrustServerCertificate=yes.
Falha a conexão com criptografia rigorosa
O modo estrito TDS 8.0 tem estes requisitos:
- O servidor deve rodar o SQL Server 2022 ou versões posteriores.
- O servidor deve ter um certificado válido e confiável.
- Você não pode configurar
TrustServerCertificate=yes.
Se o servidor não suportar TDS 8.0, use Encrypt=yes em vez disso.