Suporte a SPN (nome da entidade de serviço) em conexões de cliente no SQL Server Native Client
Importante
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 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
Para SQLNCLI fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção Ciclo de vida do suporte.
A partir do SQL Server 2008 (10.0.x), o suporte para SPNs (nomes de entidade de serviço) foi estendido para habilitar a autenticação mútua em todos os protocolos. Em versões anteriores do SQL Server, os SPNs só tinham suporte para Kerberos sobre TCP quando o SPN padrão para a instância do SQL Server era registrado no Ative Directory.
Os SPNs são usados pelo protocolo de autenticação para determinar a conta na qual uma instância do SQL Server é executada. Se a conta da instância for conhecida, a autenticação Kerberos poderá ser usada para fornecer autenticação mútua pelo cliente e servidor. Se a conta da instância não for conhecida, a autenticação NTLM, que fornece apenas a autenticação do cliente pelo servidor, será usada. Atualmente, o SQL Server Native Client executa a pesquisa de autenticação, derivando o SPN do nome da instância e das propriedades de conexão de rede. As instâncias do SQL Server tentarão registrar SPNs na inicialização ou podem ser registradas manualmente. No entanto, o registro falhará se não houver direitos de acesso suficientes para a conta que tenta registrar os SPNs.
As contas de domínio e de computador são registadas automaticamente no Ative Directory. Eles podem ser usados como SPNs ou os administradores podem definir seus próprios SPNs. O SQL Server torna a autenticação segura mais gerenciável e confiável, permitindo que os clientes especifiquem diretamente o SPN a ser usado.
Observação
Um SPN especificado por um aplicativo cliente só é usado quando uma conexão é feita com a segurança integrada do Windows.
Dica
Microsoft Kerberos Configuration Manager para SQL Server é uma ferramenta de diagnóstico que ajuda a solucionar problemas de conectividade relacionados ao Kerberos com o SQL Server. Para obter mais informações, consulte Microsoft Kerberos Configuration Manager for SQL Server.
Para obter mais informações sobre Kerberos, consulte os seguintes artigos:
Utilização
A tabela a seguir descreve os cenários mais comuns nos quais os aplicativos cliente podem habilitar a autenticação segura.
Cenário | Descrição |
---|---|
Um aplicativo herdado não especifica um SPN. | Esse cenário de compatibilidade garante que não haverá alteração de comportamento para aplicativos desenvolvidos para versões anteriores do SQL Server. Se nenhum SPN for especificado, o aplicativo dependerá de SPNs gerados e não terá conhecimento de qual método de autenticação será usado. |
Um aplicativo cliente usando a versão atual do SQL Server Native Client especifica um SPN na cadeia de conexão como um usuário de domínio ou conta de computador, como um SPN específico da instância ou como uma cadeia de caracteres definida pelo usuário. | A palavra-chave ServerSPN pode ser usada em um provedor, inicialização ou cadeia de conexão para fazer o seguinte: -Especifique a conta usada pela instância do SQL Server para uma conexão. Isso simplifica o acesso à autenticação Kerberos. Se um Centro de Distribuição de Chaves Kerberos (KDC) estiver presente e a conta correta for especificada, a autenticação Kerberos terá mais probabilidade de ser usada do que o NTLM. O KDC geralmente reside no mesmo computador que o controlador de domínio. -Especifique um SPN para procurar a conta de serviço para a instância do SQL Server. Para cada instância do SQL Server, são gerados dois SPNs padrão que podem ser usados para essa finalidade. No entanto, não é garantido que essas chaves estejam presentes no Ative Directory, portanto, nessa situação, a autenticação Kerberos não é garantida. -Especifique um SPN que será usado para procurar a conta de serviço para a instância do SQL Server. Pode ser qualquer cadeia de caracteres definida pelo usuário que mapeie para a conta de serviço. Nesse caso, a chave deve ser registrada manualmente no KDC e deve satisfazer as regras para um SPN definido pelo usuário. A palavra-chave FailoverPartnerSPN pode ser usada para especificar o SPN para o servidor de parceiro de failover. O intervalo de valores de conta e chave do Ative Directory é o mesmo que os valores que você pode especificar para o servidor principal. |
Um aplicativo ODBC especifica um SPN como um atributo de conexão para o servidor principal ou servidor parceiro de failover. | O atributo de conexão SQL_COPT_SS_SERVER_SPN pode ser usado para especificar o SPN para uma conexão com o servidor principal. O atributo de conexão SQL_COPT_SS_FAILOVER_PARTNER_SPN pode ser usado para especificar o SPN para o servidor de parceiro de failover. |
Um aplicativo OLE DB especifica um SPN como uma propriedade de inicialização da fonte de dados para o servidor principal ou para um servidor parceiro de failover. | A propriedade de conexão SSPROP_INIT_SERVER_SPN no conjunto de propriedades DBPROPSET_SQLSERVERDBINIT pode ser usada para especificar o SPN para uma conexão. A propriedade de conexão SSPROP_INIT_FAILOVER_PARTNER_SPN no DBPROPSET_SQLSERVERDBINIT pode ser usada para especificar o SPN para o servidor de parceiro de failover. |
Um usuário especifica um SPN para um servidor ou servidor parceiro de failover em um nome de fonte de dados ODBC (DSN). | O SPN pode ser especificado em um DSN ODBC através das caixas de diálogo de configuração do DSN. |
O usuário especifica um SPN para um servidor ou servidor parceiro de failover em uma caixa de diálogo OLE DB Data Link ou Login. | O SPN pode ser especificado em um de Link de Dados |
Um aplicativo ODBC determina o método de autenticação usado para estabelecer uma conexão. | Quando uma conexão é aberta com êxito, um aplicativo pode consultar o atributo de conexão SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD para determinar qual método de autenticação foi usado. Os valores incluirão, mas não estão limitados a, NTLM e Kerberos. |
Um aplicativo OLE DB determina o método de autenticação usado para estabelecer uma conexão. | Quando uma conexão é aberta com êxito, um aplicativo pode consultar a propriedade de conexão SSPROP_AUTHENTICATION_METHOD no conjunto de propriedades DBPROPSET_SQLSERVERDATASOURCEINFO para determinar qual método de autenticação foi usado. Os valores incluirão, mas não estão limitados a, NTLM e Kerberos. |
Failover
Os SPNs não são armazenados no cache de failover e, portanto, não podem ser passados entre conexões. Os SPNs serão usados em todas as tentativas de conexão com o principal e o parceiro quando especificado na cadeia de conexão ou nos atributos de conexão.
Pool de conexões
Os aplicativos devem estar cientes de que a especificação de SPNs em algumas cadeias de conexão, mas não todas, pode contribuir para a fragmentação do pool.
Os aplicativos podem especificar programaticamente SPNs como atributos de conexão, em vez de especificar palavras-chave de cadeia de conexão. Isso pode ajudar a gerenciar a fragmentação do pool de conexões.
Os aplicativos devem estar cientes de que SPNs em cadeias de conexão podem ser substituídos definindo os atributos de conexão correspondentes, mas as cadeias de conexão usadas pelo pool de conexões usarão os valores da cadeia de conexão para fins de pooling.
Comportamento do servidor Down-Level
O novo comportamento de conexão é implementado pelo cliente; portanto, ele não é específico para uma versão do SQL Server.
Servidores vinculados e delegação
Quando servidores vinculados são criados, o parâmetro @provstr de sp_addlinkedserver pode ser usado para especificar os SPNs de servidor e parceiro de failover. Os benefícios de fazer isso são os mesmos que especificar SPNs em cadeias de conexão de cliente: é mais simples e confiável estabelecer conexões que usam a autenticação Kerberos.
A delegação com servidores vinculados requer autenticação Kerberos.
Aspetos de gerenciamento de SPNs especificados por aplicativos
Ao escolher se deseja especificar SPNs em um aplicativo (por meio de cadeias de conexão) ou programaticamente por meio de propriedades de conexão (em vez de depender dos SPNs gerados pelo provedor padrão), considere os seguintes fatores:
Segurança: O SPN especificado divulga informações protegidas?
Confiabilidade: Para habilitar o uso de SPNs padrão, a conta de serviço na qual a instância do SQL Server é executada deve ter privilégios suficientes para atualizar o Ative Directory no KDC.
Conveniência e transparência de localização: Como os SPNs de um aplicativo serão afetados se seu banco de dados for movido para uma instância diferente do SQL Server? Isso se aplica ao servidor principal e ao parceiro de failover se você usar o espelhamento de banco de dados. Se uma alteração de servidor significa que os SPNs devem ser alterados, como isso afetará os aplicativos? Alguma alteração será gerenciada?
Especificando o SPN
Você pode especificar um SPN em caixas de diálogo e em código. Esta seção discute como você pode especificar um SPN.
O comprimento máximo de um SPN é de 260 caracteres.
A sintaxe que os SPNs usam na cadeia de conexão ou nos atributos de conexão é a seguinte:
Sintaxe | Descrição |
---|---|
MSSQLSvc/fqdn | O SPN padrão gerado pelo provedor para uma instância padrão quando um protocolo diferente de TCP é usado. FQDN é um nome de domínio totalmente qualificado. |
MSSQLSvc/fqdn:porta | O SPN padrão gerado pelo provedor quando o TCP é usado. porta é um número de porta TCP. |
MSSQLSvc/fqdn:InstanceName | O SPN padrão gerado pelo provedor para uma instância nomeada quando um protocolo diferente de TCP é usado. InstanceName é um nome de instância do SQL Server. |
ANFITRIÃO/fqdn HOST/MachineName |
O SPN que mapeia para contas de computador internas que são registradas automaticamente pelo Windows. |
Nome de usuário@ de domínio | Especificação direta de uma conta de domínio. Nome de usuário é um nome de conta de usuário do Windows. Domain é um nome de domínio do Windows ou um nome de domínio totalmente qualificado. |
MachineName$@Domain | Especificação direta de uma conta de computador. (Se o servidor ao qual você está se conectando estiver sendo executado em contas SISTEMA LOCAL ou SERVIÇO DE REDE, para obter autenticação Kerberos, ServerSPN pode estar no formato MachineName$@Domain.) |
KDCKey/MachineName | Um SPN especificado pelo usuário. KDCKey é uma cadeia alfanumérica que está em conformidade com as regras de uma chave KDC. |
Sintaxe ODBC e OLE DB suportando SPNs
Para obter informações específicas da sintaxe, consulte os seguintes tópicos:
Nomes de entidade de serviço (SPNs) em conexões de cliente (ODBC)
nomes de entidade de serviço (SPNs) em conexões de cliente (OLE DB)
Ver também
Recursos do SQL Server Native Client
registrar um nome de entidade de serviço para conexões Kerberos