Suporte a SPN (Nome da entidade de serviço) em conexões com o cliente
Aplica-se: SQL Server
A partir do SQL Server 2008 (10.0.x), o suporte para SPNs (nomes da entidade de serviço) foi estendido para habilitar a autenticação mútua em todos os protocolos. Em versões anteriores do SQL Server, apenas havia suporte para SPNs no Kerberos via TCP quando o SPN padrão da instância do SQL Server era registrado no Active 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, 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 só fornece autenticação do cliente pelo servidor, será usada. Atualmente, o Driver do OLE DB para SQL Server executa a pesquisa de autenticação, derivando o SPN das propriedades de nome da instância e conexão de rede. As instâncias do SQL Server tentarão registrar os SPNs na inicialização, ou eles podem ser registrados manualmente. Porém, o registro falhará se houver direitos de acesso insuficientes para a conta que tenta registrar os SPNs.
As contas de domínio e computador são registradas automaticamente no Active Directory. Essas contas podem ser usadas como SPNs ou os administradores podem definir os 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 é usado somente quando uma conexão é feita com a segurança integrada pelo Windows.
Dica
Microsoft Kerberos Configuration Manager for SQL Server é uma ferramenta de diagnóstico que ajuda a solucionar problemas de Kerberos relativos à conectividade com SQL Server. Para obter mais informações, consulte Microsoft Kerberos Configuration Manager for SQL Server.
Para obter mais informações sobre Kerberos, consulte os artigos a seguir:
Uso
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. | Este cenário de compatibilidade garante que não haverá nenhuma alteração de comportamento para aplicativos desenvolvidos para versões anteriores do SQL Server. Se nenhum SPN for especificado, o aplicativo confiará nos SPNs gerados e não terá nenhum conhecimento de qual método de autenticação será usado. |
Um aplicativo cliente que usa a versão atual do OLE DB Driver for SQL Server especifica um SPN na cadeia de conexão como um usuário do domínio ou uma conta de computador, como um SPN específico da instância ou uma cadeia de caracteres definida pelo usuário. | A palavra-chave ServerSPN pode ser usada em uma cadeia de conexão, inicialização ou provedor para fazer o seguinte: – Especificar a conta usada pela instância do SQL Server para uma conexão. Essa configuração simplifica o acesso à autenticação Kerberos. Se um KDC (Centro de Distribuição de Chaves) Kerberos estiver presente e a conta correta for especificada, a autenticação Kerberos provavelmente será mais usada que NTLM. O KDC normalmente está no mesmo computador que o controlador de domínio. – Especificar um SPN para pesquisar 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. Não há garantia de que as chaves estejam presentes no Active Directory. Entretanto, nesta situação, a autenticação Kerberos não é garantida. – Especificar um SPN que será usado para pesquisar a conta de serviço para a instância do SQL Server. Esse valor poderá ser qualquer cadeia de caracteres definida pelo usuário que é mapeada para a conta de serviço. Neste 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 conta e valores de chave do Active Directory é igual aos valores que você pode especificar para o servidor principal. |
Um aplicativo OLE DB especifica um SPN como uma propriedade de inicialização de fonte de dados para o servidor principal ou para um servidor de 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 na DBPROPSET_SQLSERVERDBINIT pode ser usada para especificar o SPN para o servidor de parceiro de failover. |
O usuário especifica um SPN para um servidor ou servidor de parceiro de failover em uma caixa de diálogo Vínculo de Dados ou Logon no OLE DB. | O SPN pode ser especificado em uma caixa de diálogo Vínculo de Dados ou Logon . |
Um aplicativo OLE DB determina o método de autenticação usado para estabelecer uma conexão. | Quando uma conexão foi 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, sem limitações, 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 a entidade e o parceiro quando especificados na cadeia de conexão ou nos atributos de conexão.
Pool de conexões
Os aplicativos devem estar atentos que especificar SPNs em algumas, mas não em todas as cadeias de conexão, podem contribuir para o agrupamento da fragmentação.
Os aplicativos podem especificar SPNs programaticamente como atributos de conexão, em vez de especificar palavras-chave da cadeia de conexão. Esse método pode ajudar no gerenciamento da fragmentação do pool de conexões.
Os aplicativos deverão saber que os SPNs nas cadeias de conexão possam 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 pool.
Comportamento de servidor de versão anterior
O novo comportamento de conexão é implementado pelo cliente; portanto, ele não é específico a uma versão do SQL Server.
Servidores vinculados e delegação
Quando são criados servidores vinculados, o parâmetro @provstr de sp_addlinkedserver pode ser usado para especificar os SPNs de servidor e de parceiro de failover. Os benefícios desse método são os mesmos que ao especificar SPNs em cadeias de conexão de cliente. É mais simples e confiável estabelecer conexões que usam autenticação Kerberos.
A delegação com servidores vinculados exige a autenticação Kerberos.
Aspectos 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 confiar no provedor padrão gerado por SPNs), considere os seguintes fatores:
Segurança: o SPN especificado revela informações que estão protegidas?
Confiabilidade: para permitir o uso de SPNs padrão, a conta de serviço na qual a instância do SQL Server é executada precisa ter privilégios suficientes para atualizar o Active Directory no KDC.
Conveniência e transparência de local: como os SPNs de um aplicativo serão afetados se seu banco de dados for movido para uma instância diferente do SQL Server ? Esse conceito se aplicará ao servidor principal e seu parceiro de failover se você usar espelhamento de banco de dados. Se uma alteração de servidor significar que os SPNs devem ser alterados, como isto afetará os aplicativos? Qualquer 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 tamanho máximo de um SPN é 260 caracteres.
A sintaxe que os SPNs usam em cadeia de conexão ou 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:port | O SPN padrão gerado pelo provedor quando o protocolo TCP é usado. port é 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. |
HOST/fqdn HOST/MachineName |
O SPN que mapeia para contas internas do computador que são automaticamente registradas pelo Windows. |
Username@Domain | Especificação direta de uma conta de domínio. Username é um nome de conta de usuário do Windows. Domain é um nome de domínio ou nome de domínio totalmente qualificado do Windows. |
MachineName$@Domain | Especificação direta de uma conta de computador. (Se o servidor ao qual você está se conectando estiver sendo executado em contas LOCAL SYSTEM ou NETWORK SERVICE, para obter autenticação Kerberos, o ServerSPN poderá estar no formato MachineName$@Domain.) |
KDCKey/MachineName | Um SPN especificado pelo usuário. KDCKey é uma cadeia de caracteres alfanumérica que está em conformidade com as regras para uma chave do KDC. |
Sintaxe do OLE DB que dá suporte a SPNs
Para informações específicas da sintaxe, confira os seguintes artigos:
Consulte Também
Recursos do Driver do OLE DB para SQL Server
Registrar um nome de entidade de serviço para conexões de Kerberos