Principais diferenças de versão no Microsoft ODBC Driver for SQL Server

Este artigo descreve alterações marcantes entre o Microsoft ODBC Driver 18 para SQL Server e a versão 17.

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 .

Resumo das alterações

Area Versão 17 Versão 18 e versões posteriores
Configuração padrão Encrypt no yes
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 Não acontece a menos que peça encriptação Ocorre por defeito, porque a encriptação está ativada por defeito
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

Na versão 17, as ligações não são encriptadas a menos que peça encriptação ou que o servidor a exija isso. Na versão 18 e versões posteriores, as ligações são encriptadas por defeito.

Como o driver valida o certificado do servidor sempre que encripta uma ligação, uma aplicação que se liga a um servidor com um certificado auto-assinado ou não confiável liga-se com sucesso com a versão 17 e falha com a versão 18. A falha é um erro de validação de certificado, não um erro de autenticação.

Tens três formas de o resolver, listadas do mais ao menos seguro:

  • Instale um certificado no servidor em que o cliente confia. Esta opção é a recomendada e é a única que mantém tanto a encriptação como a validação.
  • Mantenha a encriptação ativa e indique ao driver qual nome validar, definindo HostNameInCertificate ou ServerCertificate.
  • Desligue a encriptação para restaurar o padrão da versão 17, adicionando Encrypt=no à cadeia de ligação.

Atenção

A configuração TrustServerCertificate=yes mantém a ligação encriptada mas desativa a validação do certificado, o que deixa a ligação vulnerável a ataques adversários no meio. Prefira um certificado de confiança.

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 A ligação não está encriptada a menos que o servidor o exija assim.
Strict None A ligação utiliza encriptação TDS 8.0.

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

Para restaurar o comportamento padrão da versão 17, defina Encrypt explicitamente:

Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;

Definir o valor explicitamente é benéfico mesmo na versão 17, porque faz com que a cadeia de ligação se comporte da mesma forma em ambas as versões.

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:

Keyword Purpose
ConcatNullYieldsNull Controla se a concatenação de um valor nulo resulta em valor nulo.
GetDataExtensions Controla quais SQLGetData extensões o driver ativa.
HostNameInCertificate Especifica o nome do host a validar no certificado TLS do servidor.
IpAddressPreference Especifica a família de endereços IP que o driver tenta primeiro.
LongAsMax Mapeia tipos de dados longos para os seus max equivalentes.
RetryExec Configura regras de retentativa para consultas falhadas.
ServerCertificate Especifica o caminho para um ficheiro de certificado para validar o servidor.

Palavras-chave individuais foram introduzidas em diferentes versões da versão 18. Para a versão que introduziu cada palavra-chave, e para a referência completa de palavras-chave, veja ODBC DSN e cadeia de ligação keywords.