Usando 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 AnalyticsPDW (Analytics Platform System)

Importante

O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento de aplicativo. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) ou o Microsoft ODBC Driver for SQL Server mais recente no futuro. Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados SQL Server (versões 2012 a 2019), consulte esta exceção de Ciclo de Vida de Suporte.

O SQL Server sempre criptografa pacotes de rede associados a logon. Se nenhum certificado tiver sido provisionado no servidor quando ele foi inicializado, o SQL Server vai gerar um certificado autoassinado usado para criptografar pacotes de logon.

Os certificados autoassinados não garantem a segurança. O handshake criptografado é baseado no NTLM (NT LAN Manager). É altamente recomendável que você provisione um certificado verificável no SQL Server a fim de ter uma conectividade segura. O protocolo TLS pode se tornar seguro somente com a validação de certificado.

Os aplicativos também podem solicitar a 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 por SQL Server Configuration Manager usando a opção Forçar Criptografia de Protocolo 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 aprovisionado no servidor. Ao configurar o cliente para confiar no certificado no servidor, você pode se tornar vulnerável a ataques man-in-the-middle. Se você implantar um certificado verificável no servidor, será necessário alterar as configurações do cliente sobre confiar no 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 permitir que a criptografia seja usada quando um certificado não tiver sido provisionado no servidor, SQL Server Configuration Manager pode ser usado para definir as opções Forçar Criptografia de Protocolo e Certificado do Servidor confiável. Neste caso, a criptografia usará um certificado do servidor autoassinado sem validação, se nenhum certificado verificável tiver sido provisionado no servidor.

Os aplicativos também podem usar a palavra-chave "TrustServerCertificate" ou seu atributo de conexão associado para garantir a criptografia. As configurações do aplicativo nunca reduzem o nível de segurança definido pelo SQL Server Gerenciador de Configurações de Cliente, mas podem fortalecê-la. Por exemplo, se a opção Forçar Criptografia de Protocolo não for definida para o cliente, um aplicativo poderá solicitar a criptografia por conta própria. Para garantir a criptografia até mesmo quando um certificado do servidor não foi provisionado, um aplicativo pode solicitar a criptografia e "TrustServerCertificate". Porém, se "TrustServerCertificate" não for habilitado 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 Result
Não N/D Não (padrão) Ignored Não ocorre criptografia.
Não N/D Sim Não (padrão) A criptografia só ocorrerá se houver um certificado de 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 do servidor autoassinado.
Sim Não Ignored Ignored A criptografia só ocorrerá se houver um certificado de servidor verificável; caso contrário, a tentativa de conexão falhará.
Sim Sim Não (padrão) Ignored A criptografia sempre ocorre, mas pode usar um certificado do servidor autoassinado.
Sim Sim Sim Não (padrão) A criptografia só ocorrerá se houver um certificado de 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 tanto o cliente quanto 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 SQL Server Native Client dá suporte à criptografia sem validação por meio da adição da propriedade de inicialização da fonte de dados SSPROP_INIT_TRUST_SERVER_CERTIFICATE, que é implementada no conjunto de propriedades DBPROPSET_SQLSERVERDBINIT. Além disso, uma nova palavra-chave de cadeia de conexão, "TrustServerCertificate", foi adicionada. Ela aceita os valores sim ou não; não é o padrão. Ao usar componentes de serviço, aceita os valores true ou false; false é o padrão.

Para obter mais informações sobre aprimoramentos realizados no conjunto de propriedades DBPROPSET_SQLSERVERDBINIT, confira Propriedades de inicialização e autorização.

Driver ODBC do SQL Server Native Client

O driver ODBC 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 SQL_TRUST_SERVER_CERTIFICATE_YES ou SQL_TRUST_SERVER_CERTIFICATE_NO, com SQL_TRUST_SERVER_CERTIFICATE_NO sendo padrão. Além disso, uma nova palavra-chave de cadeia de conexão, “TrustServerCertificate”, foi adicionada. Ele aceita valores sim ou não; "não" é o padrão.

Consulte Também

Recursos do SQL Server Native Client