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.
Este artigo descreve alterações marcantes entre o Microsoft ODBC Driver 18 para SQL Server e a versão 17. Use-o quando escolher uma versão do driver, atualizar uma aplicação da versão 17 para a versão 18, ou precisar de fazer uma cadeia de ligação comportar-se de forma consistente em ambas as versões.
A maioria das aplicações que atualizam da versão 17 para a versão 18 é afetada por uma única alteração: as ligações são encriptadas por defeito. Se a sua aplicação deixar de se ligar após atualizar, leia primeiro o comportamento de encriptação padrão .
Escolha a versão 17 ou a versão 18
O Driver 18 é a versão principal atual. O Driver 17 continua suportado, mas as aplicações que o utilizam ainda precisam da versão menor mais recente da linha Driver 17 para receber correções. Para datas de suporte e regras de manutenção, consulte ciclo de vida do Suporte.
| Scenario | Caminho recomendado |
|---|---|
| Nova aplicação | Começa pelo Driver 18. Configure a encriptação e a validação de certificados antes da produção. |
| Aplicação existente do Driver 17 | Instale o Driver 18 juntamente com o Driver 17, altere o nome do driver na cadeia de ligação ou DSN, e defina Encrypt explicitamente. Se a validação do certificado falhar, corrige o certificado do servidor ou o armazenamento de confiança do cliente. |
Aplicação que precisa Encrypt=Strictde , HostnameInCertificate, RetryExec, ou outra palavra-chave Driver 18 |
Use uma versão do Driver 18 que suporte essa configuração. O Driver 17 não aceita o Strict valor de Encrypt nem reconhece as novas palavras-chave. |
Aplicação que necessita de fixação de ficheiro certificado com ServerCertificate |
Use o Driver 18.1 ou uma versão posterior com Encrypt=Strict. O driver 17 não suporta esta configuração. |
Mudar de versão principal normalmente significa alterar o nome do driver ou o pacote que escolhes:
| Platform | Piloto 17 | Piloto 18 |
|---|---|---|
| Nome do driver da cadeia de ligação | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Nome do pacote Linux | msodbcsql17 |
msodbcsql18 |
Resumo das alterações
As linhas padrão e de validação descrevem ligações remotas normais sem uma definição DSNEncrypt, o SQL_COPT_SS_ENCRYPT atributo ou o sobreposição do Windows Force Protocol Encryption. O LocalDB não é um alvo remoto TLS.
| Area | Versão 17 | Versão 18 e versões posteriores |
|---|---|---|
Configuração padrão Encrypt |
no, a menos que Authentication seja definido para um valor diferente de none ou a aplicação define SQL_COPT_SS_ACCESS_TOKEN; então yes |
yes (18.0.1 e posteriores) |
Encrypt Valores aceites |
yes, no |
yes, no, Mandatory, Optional, Strict |
| Modos de encriptação | De vez em quando | Desligada, ligada ou rígida |
| Validação de certificado do servidor | Com Encrypt=yes;TrustServerCertificate=no, valida o certificado. Só a encriptação exigida pelo servidor não seleciona validação. |
Valida por defeito. Em modos não-Strict, TrustServerCertificate=yes ignora a validação normal, incluindo quando o servidor requer encriptação. |
| Palavras-chave de cadeia de ligação | Conjunto base | Conjunto base mais novas palavras-chave |
Alterações de criptografia
Comportamento padrão de encriptação
O Driver 17 tem Encrypt=no por defeito a menos que a Authentication palavra-chave seja definida para um valor diferente de none ou a aplicação defina o SQL_COPT_SS_ACCESS_TOKEN atributo. Qualquer um altera o padrão para yes. Um still explícito Encrypt=no desliga a encriptação. O driver 18.0.1 e posteriores passam por defeito a Encrypt=yes. Define Encrypt explicitamente quando comparas versões.
A encriptação de ligação total protege o texto e os resultados da consulta, bem como o login. Com Encrypt=no, o servidor pode ainda exigir encriptação de ligação total. Quando tanto o cliente como o servidor desligam a encriptação, a negociação não-Strict utiliza encriptação apenas por login; isto não protege os dados da aplicação subsequentes.
Com Encrypt=yes;TrustServerCertificate=no, ambos os drivers selecionam a validação normal do certificado do servidor. Se apenas o servidor exigir encriptação de ligação total e TrustServerCertificate=no (o predefinido), o Driver 18 valida o certificado. Com TrustServerCertificate=yes o modo Strict fora de casa, o Driver 18 ignora essa validação. O Driver 17 não valida apenas por causa desse requisito do servidor. A encriptação do Windows Force Protocol e os caminhos internos de validação de certificados não são cobertos por esta comparação.
Com as definições de encriptação padrão, atualizar da versão 17 para a versão 18 pode expor um certificado de servidor não confiável. Se a versão 18 rejeitar o certificado, diagnostique a cadeia de certificados e o nome antes de alterar as definições de autenticação.
Mantenha a encriptação e validação da identidade do servidor ativadas:
- Configure um certificado válido do servidor e o armazenamento de confiança do cliente para que o cliente confie na sua autoridade certificadora emissora. Liga-te usando um nome no certificado.
- Se ligares por um alias, define
HostnameInCertificateum nome válido no certificado do servidor. Esta definição não repara uma cadeia de certificados não confiável. - Para
Encrypt=Strict, o Driver 18.1 e versões posteriores também suportamServerCertificatea comparação do certificado do servidor com um ficheiro de certificado. Esta definição fixa um certificado; não especifica um nome de host. Revise as suas restrições no ODBC DSN e nas palavras-chave de cadeia de ligação antes de o usar.
Atenção
Para um ambiente de teste isolado, Encrypt=yes;TrustServerCertificate=yes pede encriptação mas ignora a validação da identidade do servidor, deixando a ligação aberta a ataques adversários no meio. Não o uses como reparação de confiança de produção. Em modo Rigoroso, TrustServerCertificate é ignorado.
Se uma aplicação existente exigir o padrão da versão 17 durante um teste de compatibilidade controlado, consulte Restaurar comportamento de encriptação da versão 17.
Encrypt=no E Encrypt=optional não repare a confiança do certificado e pode deixar os dados da aplicação sem encriptação.
Encriptar valores
A versão 17 aceita apenas yes e no. A versão 18 e versões posteriores aceitam esses valores e acrescentam mais três:
| Value | Equivalente a | Comportamento |
|---|---|---|
Mandatory |
yes |
A ligação está encriptada. |
Optional |
no |
Não pede encriptação de ligação total. O servidor ainda pode exigir isso; a encriptação apenas por login não é proteção para sessão completa. |
Strict |
None | A ligação utiliza encriptação TDS 8.0. O servidor deve suportar TDS 8.0, como o SQL Server 2022 e versões posteriores. |
Strict não tem equivalente à versão 17. É o único valor que seleciona o TDS 8.0, onde a encriptação é negociada antes da troca de login em vez de durante ela.
Restaurar comportamento de encriptação da versão 17
Após rever as correções de confiança, use a seguinte configuração apenas para um teste de compatibilidade controlado que permita dados de aplicação não encriptados:
Encrypt=no
O Driver 18 também aceita Encrypt=optional esta configuração. Nenhum dos valores impede que o servidor precise de encriptação. Restaurar a configuração encriptada pretendida após o teste; não usar encriptação desativada como remédio de confiança de certificados.
Lista de verificação de upgrades
- Strings de ligação de inventário, DSNs, referências de pacotes e scripts de implementação que selecionam o Driver 17.
- Instala o Driver 18 num ambiente de teste que corresponda à produção.
- Mude a
Driverpalavra-chave em cada cadeia de ligação paraODBC Driver 18 for SQL Server, e atualize ou recrie cada DSN para usar o Driver 18. Instalar o Driver 18 não altera as ligações existentes, porque as ligações que nomeiam o Driver 17 continuam a usar o Driver 17. - Defina
Encryptexplicitamente. UseEncrypt=Mandatorycom validação normal de certificados. UseEncrypt=Strictapenas quando o servidor suporta TDS 8.0, como o SQL Server 2022 e versões posteriores. Para servidores que não suportam TDS 8.0, useEncrypt=Mandatory. - Para validação normal, ligue-se e
TrustServerCertificate=noverifique a cadeia confiável e o nome do servidor aceite. Para o Driver 18.1 e versões posteriores com fixação de ficheiros Strict, verifique a correspondência exata dos certificados e as datas de validade;TrustServerCertificateé ignorado no modo Strict. - Execute os caminhos de autenticação, consulta, transação, cópia em massa, failover e tentativa novamente da aplicação.
- Revise os diagnósticos para erros de validação de certificados antes de tratar falhas como autenticação ou erros de rede.
- Mantém o Driver 17 instalado e guarda o inventário desde o passo 1 até a validação estar concluída, para poderes voltar à versão 17.
Voltar para a versão 17
O Driver 17 e o Driver 18 instalam-se lado a lado, por isso podes voltar atrás sem desinstalar o Driver 18. Para detalhes de download e instalação, consulte Download ODBC Driver for SQL Server.
- Confirma se o Driver 17 ainda está instalado em cada cliente.
- Usando o inventário da checklist de atualização, altere a
Driverpalavra-chave em cada cadeia de ligação de volta paraODBC Driver 17 for SQL Server. - Atualize ou recrie cada DSN para usar o Driver 17.
- Reverter referências de pacotes e scripts de implementação para o pacote Driver 17, como
msodbcsql17no Linux. - Restaure os
Encryptvalores eTrustServerCertificateque a aplicação usou com o Driver 17. O Driver 17 aceita apenasyesenoparaEncrypte não reconhece palavras-chave do Driver 18 comoHostnameInCertificateouServerCertificate, por isso remova valores e palavras-chave adicionados para o Driver 18. Mudar as palavras-chave dos alias de volta para os nomes do Driver 17 e substituirConnectTimeoutpor umaSQLSetConnectAttrchamada que definaSQL_ATTR_LOGIN_TIMEOUT. Para o mapeamento, veja Novas palavras-chave de cadeia de ligação.
Valide o rollback antes de o considerar completo:
- Cada ligação reporta o Driver 17. Chame SQLGetInfo com
SQL_DRIVER_VER; a versão principal é17. - Os caminhos de autenticação, consulta, transação, cópia em massa, failover e retentativa da aplicação têm sucesso.
- As cadeias de ligação e DSNs não contêm valores
Encryptou palavras-chave que foram adicionados para o Driver 18.
Novas palavras-chave para cadeia de ligação
A versão 18 adiciona as seguintes palavras-chave de cadeia de ligação, que a versão 17 não reconhece. Alguns deles são novos nomes para definições que a versão 17 suporta sob uma palavra-chave ou atributo diferente, listados na coluna equivalente da Versão 17 .
| Keyword | Versão mínima | Purpose | Equivalente à versão 17 |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Controla se a concatenação de um valor nulo resulta em valor nulo. | None |
ConnectTimeout |
18.7 | Define o tempo limite de login em segundos. Se a aplicação também definir SQL_ATTR_LOGIN_TIMEOUT, o atributo tem precedência. |
SQL_ATTR_LOGIN_TIMEOUT atributo, definido com SQLSetConnectAttr |
FailoverPartner |
18.7 | Especifica o parceiro de failover para espelhamento de base de dados. Apenas Windows. |
Failover_Partner palavra-chave |
GetDataExtensions |
18,0 | Controla quais SQLGetData extensões o driver ativa. |
None |
HostnameInCertificate |
18,0 | Especifica o nome do host a validar no certificado TLS do servidor. | None |
IpAddressPreference |
18.1 | Especifica a família de endereços IP que o driver tenta primeiro. | None |
LongAsMax |
18,0 | Mapeia tipos de dados longos para os seus max equivalentes. |
None |
MultipleActiveResultSets |
18.7 | Permite múltiplos conjuntos de resultados ativos (MARS). Aceita Yes ou No. |
MARS_Connection palavra-chave |
RetryExec |
18.1 | Configura regras de retentativa para consultas falhadas. | None |
ServerCertificate |
18.1 | Especifica o ficheiro do certificado para corresponder ao certificado do servidor ao usar Encrypt=Strict. |
None |
WorkstationID |
18.7 | Especifica o nome da estação de trabalho enviado ao servidor. |
WSID palavra-chave |
MultipleActiveResultSets, WorkstationID, e FailoverPartner são pseudónimos que alinham nomes-chave ODBC com Microsoft.Data.SqlClient nomes de propriedades. A versão 18 também aceita os nomes mais antigos. Para mais detalhes, veja Unificação de palavras-chave de string de ligação e palavra-chave ConnectTimeout.
Para a referência completa de palavras-chave, veja ODBC DSN e palavras-chave de cadeia de ligação.