Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O driver mssql-python suporta ligações encriptadas através da Segurança da Camada de Transporte (TLS). A encriptação protege os dados em trânsito entre a sua aplicação e o SQL Server, e previne escutas clandestinas e ataques de adversário no meio.
Encriptação de ligação
Ativar encriptação
Use a Encrypt palavra-chave para controlar a encriptação da ligação:
import mssql_python
# Require encryption (recommended)
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
)
Encriptar valores de palavras-chave
| Valor | Descrição |
|---|---|
yes |
Requer encriptação e falha se o servidor não suportar TLS. |
no |
Não encripta a ligação. Não recomendado para produção. |
strict |
Utiliza o modo de encriptação estrita TDS 8.0. Requer SQL Server 2022 ou posterior. |
Importante
Base de Dados SQL do Azure requer Encrypt=yes. As ligações sem encriptação são rejeitadas.
Validação do certificado
TrustServerCertificate
Controla 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 em relação a autoridades de certificação confiáveis. Este valor é a definição padrão e recomendada. |
yes |
Confia em qualquer certificado e ignora a validação. Esta configuração é insegura. |
Atenção
Definir TrustServerCertificate=yes em produção expõe a sua aplicação a ataques de intermediário malicioso. Use esta definição apenas para desenvolvimento com certificados auto-assinados.
Encriptação estrita TDS 8.0
O SQL Server 2022 e versões posteriores suportam o TDS 8.0 com modo de encriptação rigorosa:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Encrypt=strict;"
)
O modo estrito proporciona o nível de segurança mais elevado:
- O driver estabelece o TLS antes de qualquer handshake TDS.
- A validação do certificado é obrigatória e não pode usar
TrustServerCertificate=yes. - Este modo oferece o mais alto nível de proteção contra interceção.
HostNameInCertificate
Quando o nome do certificado do servidor não corresponde ao nome do servidor de ligação:
conn = mssql_python.connect(
"Server=192.168.1.100;" # IP address
"Database=<database>;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
"HostNameInCertificate=<server>.contoso.com;" # Certificate CN
)
Esta palavra-chave é útil quando:
- A sua aplicação liga-se através de um endereço IP em vez de um nome de host.
- O servidor está por trás de um balanceador de carga.
- O certificado utiliza um nome de assunto diferente do nome do servidor de ligação.
Configurações recomendadas
Base de Dados SQL do Azure
Base de Dados SQL do Azure requer encriptação:
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryDefault;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
)
SQL Server no local (produção)
Para SQL Server local com um certificado assinado pela CA, mantenha-se 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 auto-assinados, defina TrustServerCertificate=yes para saltar 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 ligação em TLS desde o início:
conn = mssql_python.connect(
"Server=<server>;"
"Database=<database>;"
"Encrypt=strict;"
)
Troubleshooting
"Fornecedor SSL: Falha na validação de certificados"
O certificado do servidor não pôde ser validado. Faça estas verificações:
- Verifica se o certificado é de uma CA de confiança.
- 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 o desenvolvimento, use
TrustServerCertificate=yes.
"Fornecedor TCP: Uma ligação existente foi encerrada à força"
O servidor pode precisar de encriptação, mas o cliente não a pediu. Experimente estes passos:
- Adiciona
Encrypt=yesà tua cadeia de ligação. - Verifique a configuração do SQL Server relativamente à definição Forçar Encriptação.
"A cadeia de certificados foi emitida por uma autoridade que não é de confiança"
A CA raiz do certificado não está na loja raiz confiável do sistema. Faça estas verificações:
- Instale o certificado da CA na loja raiz de confiança.
- Para SQL do Azure, certifique-se de que o seu sistema confia nos certificados de CA da Microsoft.
- Para o desenvolvimento, use
TrustServerCertificate=yes.
A ligação falha com encriptação rigorosa
O modo estrito TDS 8.0 tem os seguintes requisitos:
- O servidor deve executar o SQL Server 2022 ou posterior.
- O servidor deve ter um certificado válido e de confiança.
- Não podes definir
TrustServerCertificate=yes.
Se o servidor não suportar TDS 8.0, use Encrypt=yes em vez disso.