Compartilhar via


Usar criptografia sem validação no SQL Server Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

O SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o provedor OLE DB para SQL Server (SQLOLEDB) da Microsoft herdado não são recomendados para desenvolver um novo aplicativo.

Para novos projetos, use um dos seguintes drivers:

Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.

O SQL Server sempre criptografa pacotes de rede associados a logon. Se nenhum certificado foi provisionado no servidor quando ele é iniciado, o SQL Server gera um certificado autoassinado que é usado para criptografar pacotes de logon.

Certificados autoassinados não garantem a segurança. O handshake criptografado é baseado no NTLM (NT LAN Manager). Você deve provisionar um certificado verificável no SQL Server para conectividade segura. O protocolo TLS pode se tornar seguro somente com a validação de certificado.

Os aplicativos também podem solicitar criptografia de todo o tráfego de rede usando palavras-chave de cadeia de conexão ou propriedades de conexão. As palavras-chave são "Criptografar" para ODBC e OLE DB ao usar uma cadeia de caracteres de provedor com IDbInitialize::Initialize, ou "Usar Criptografia para Dados" para ADO e OLE DB ao usar uma cadeia de caracteres de inicialização com IDataInitialize. Isso também pode ser configurado pelo SQL Server Configuration Manager usando a opção Force Protocol Encryption e configurando o cliente para solicitar conexões criptografadas. Por padrão, a criptografia de todo o tráfego de rede para uma conexão requer que um certificado seja provisionado no servidor. Ao configurar seu cliente para confiar no certificado no servidor, você está vulnerável a ataques man-in-the-middle. Se você implantar um certificado verificável no servidor, certifique-se de alterar as configurações do cliente sobre a confiança do certificado para FALSE.

Para obter informações sobre palavras-chave de cadeia de conexão, consulte Usando palavras-chave de cadeia de conexão com SQL Server Native Client.

Para habilitar a criptografia a ser usada quando um certificado não é provisionado no servidor, o SQL Server Configuration Manager pode ser usado para definir as opções forçar criptografia de protocolo e certificado de servidor confiável. Nesse caso, a criptografia usa um certificado de servidor autoassinado sem validação se nenhum certificado verificável foi provisionado no servidor.

Os aplicativos também podem usar a TrustServerCertificate palavra-chave ou seu atributo de conexão associado para garantir que a criptografia ocorra. As configurações do aplicativo nunca reduzem o nível de segurança definido pelo SQL Server Client Configuration Manager, mas podem fortalecê-lo. Por exemplo, se a Criptografia de Protocolo force não estiver definida para o cliente, um aplicativo poderá solicitar criptografia propriamente dita. Para garantir a criptografia mesmo quando um certificado de servidor não é provisionado, um aplicativo pode solicitar criptografia e TrustServerCertificate. No entanto, se TrustServerCertificate não estiver ativado na configuração do cliente, um certificado do servidor provisionado ainda será necessário. A tabela a seguir descreve todos os casos:

Configuração do cliente Forçar Criptografia de Protocolo Configuração do cliente Confiar em Certificado do Servidor Atributo de conexão/cadeia de conexão Criptografar/Usar criptografia de dados Atributo de conexão/cadeia de conexão Confiar em Certificado do Servidor Resultado
Não N/D Não (padrão) Ignorado Não ocorre criptografia.
Não N/D Sim Não (padrão) A criptografia só ocorrerá se houver um certificado do servidor verificável; caso contrário, a tentativa de conexão falhará.
Não N/D Sim Sim A criptografia sempre ocorre, mas pode usar um certificado de servidor autoassinado.
Sim Não Ignorado Ignorado A criptografia só ocorrerá se houver um certificado do servidor verificável; caso contrário, a tentativa de conexão falhará.
Sim Sim Não (padrão) Ignorado A criptografia sempre ocorre, mas pode usar um certificado de servidor autoassinado.
Sim Sim Sim Não (padrão) A criptografia só ocorrerá se houver um certificado do servidor verificável; caso contrário, a tentativa de conexão falhará.
Sim Sim Sim Sim A criptografia sempre ocorre, mas pode usar um certificado de servidor autoassinado.

Cuidado

A tabela anterior fornece apenas um guia sobre o comportamento do sistema em diferentes configurações. Para conectividade segura, verifique se o cliente e o servidor exigem criptografia. Verifique também se o servidor tem um certificado verificável e se a configuração TrustServerCertificate no cliente está definida como FALSE.

Provedor OLE DB do SQL Server Native Client

O provedor OLE DB do SQL Server Native Client dá suporte à criptografia sem validação por meio da adição da propriedade de inicialização da fonte de SSPROP_INIT_TRUST_SERVER_CERTIFICATE dados, que é implementada no DBPROPSET_SQLSERVERDBINIT conjunto de propriedades. Além disso, uma nova palavra-chave TrustServerCertificatede cadeia de conexão foi adicionada. Ele aceita yes ou no valores; no é o padrão. Ao usar componentes de serviço, ele aceita true ou false valores; false é o padrão.

Para obter mais informações sobre aprimoramentos feitos no DBPROPSET_SQLSERVERDBINIT conjunto de propriedades, consulte Initialization and Authorization Properties (Native Client OLE DB Provider).

Driver ODBC do SQL Server Native Client

O driver ODBC do SQL Server Native Client dá suporte à criptografia sem validação por meio de adições às funções SQLSetConnectAttr e SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE foi adicionado para aceitar ou SQL_TRUST_SERVER_CERTIFICATE_YESSQL_TRUST_SERVER_CERTIFICATE_NO, sendo SQL_TRUST_SERVER_CERTIFICATE_NO o padrão. Além disso, uma nova palavra-chave TrustServerCertificatede cadeia de conexão foi adicionada. Ele aceita yes ou no valores; no é o padrão.