Registrar um nome de entidade de serviço para conexões de Kerberos
Para usar a autenticação Kerberos com o SQL Server, é preciso atender a estas duas condições:
Os computadores cliente e servidor devem fazer parte do mesmo domínio do Windows ou de domínios confiáveis.
Um SPN (Nome da Entidade de Serviço) deve ser registrado no Active Directory, o qual assume a função do Centro de Distribuição de Chaves em um domínio Windows. O SPN, depois de registrado, é mapeado para a conta do Windows que iniciou o serviço de instância SQL Server. Se o registro do SPN não foi realizado ou falhou, a camada de segurança do Windows não poderá determinar a conta associada ao SPN e a autenticação Kerberos não será utilizada.
Observação
Se o servidor não puder registrar automaticamente o SPN, será necessário registrá-lo manualmente. Veja Registro manual de SPN.
É possível verificar se uma conexão está usando Kerberos consultando a exibição de gerenciamento dinâmico sys.dm_exec_connections. Execute a consulta a seguir e verifique o valor da coluna auth_scheme, que será "KERBEROS" se Kerberos estiver habilitado.
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;
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.
A função do SPN na autenticação
Quando um aplicativo abre uma conexão e usa a Autenticação do Windows, o SQL Server Native Client passa o nome do computador, o nome da instância e, opcionalmente, um SPN do SQL Server. Se a conexão passar um SPN, ele será usado sem qualquer alteração.
Se a conexão não passar um SPN, um SPN padrão será construído a partir do protocolo usado, do nome do servidor e do nome da instância.
Em ambos os casos, o SPN é enviado ao centro de distribuição de chave para obter um token de segurança para autenticar a conexão. Se não for possível obter um token de segurança, a autenticação usará o NTLM.
Um SPN (nome da entidade de serviço) é o nome pelo qual um cliente identifica exclusivamente uma instância de um serviço. O serviço de autenticação Kerberos pode usar um SPN para autenticar um serviço. Quando um cliente deseja se conectar a um serviço, ele localiza uma instância do serviço, compõe um SPN para essa instância, conecta-se ao serviço e apresenta o SPN para autenticação do serviço.
Observação
As informações fornecidas neste tópico também se aplicam a configurações do SQL Server que usam clustering.
A Autenticação do Windows é o método preferencial de os usuários se autenticarem no SQL Server. Os clientes que usam a Autenticação do Windows são autenticados usando NTLM ou Kerberos. Em um ambiente do Active Directory, a autenticação Kerberos é sempre tentada primeiro. A autenticação Kerberos não está disponível para clientes SQL Server 2005 usando pipes nomeados.
Permissões
Quando o serviço do Mecanismo de Banco de Dados é iniciado, ele tenta registrar o SPN (nome da entidade de serviço). Se a conta que estiver iniciando o SQL Server não tiver permissão para registrar um SPN nos Active Directory Domain Services, ocorrerá uma falha nessa chamada e uma mensagem de aviso será registrada no log de eventos do aplicativo, bem como no log de erros do SQL Server. Para registrar o SPN, o Mecanismo de Banco de Dados deve estar em execução em uma conta interna, como Sistema Local (não recomendado) ou SERVIÇO DE REDE ou uma conta que tenha permissão para registrar um SPN, como uma conta de administrador de domínio. Quando SQL Server está em execução no sistema operacional Windows 7 ou Windows Server 2008 R2, você pode executar SQL Server usando uma conta virtual ou uma MSA (conta de serviço gerenciado). Tanto contas virtuais quanto MSAs podem registrar um SPN. Se SQL Server não estiver em execução em uma dessas contas, o SPN não será registrado na inicialização e o administrador de domínio deverá registrar o SPN manualmente.
Observação
Quando o domínio do Windows estiver configurado para execução em um nível inferior ao nível funcional do Windows Server 2008 R2, a Conta de Serviço Gerenciado não terá as permissões necessárias para registrar os SPNs do serviço do Mecanismo de Banco de Dados do SQL Server. Se a autenticação Kerberos for necessária, o Administrador de Domínio deverá registrar manualmente os SPNs do SQL Server na Conta de Serviço Gerenciado.
O artigo da Base de Dados de Conhecimento, Como usar a autenticação Kerberos no SQL Server, contém informações sobre como conceder permissões de leitura e gravação a um SPN de uma conta que não seja um Administrador de Domínio.
Informações adicionais estão disponíveis em Como implementar a delegação restrita de Kerberos com o SQL Server 2008
Formatos de SPN
Começando pelo SQL Server 2008, o formato de SPN é alterado para dar suporte à autenticação Kerberos em TCP/IP, pipes nomeados e memória compartilhada. Os formatos de SPN com suporte para instâncias padrão e nomeadas são os seguintes:
Instância nomeada
MSSQLSvc/FQDN:[port|instancename], em que:
MSSQLSvc é o serviço que está sendo registrado.
FQDN é o nome de domínio totalmente qualificado do servidor.
port é o número da porta TCP.
instancename é o nome da instância do SQL Server.
Instância padrão
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, em que:
MSSQLSvc é o serviço que está sendo registrado.
FQDN é o nome de domínio totalmente qualificado do servidor.
port é o número da porta TCP.
O formato de SPN novo não requer um número de porta. Isso significa que um servidor de várias portas ou um protocolo que não usa números de porta pode usar a autenticação Kerberos.
Observação
No caso de uma conexão TCP/IP, na qual a porta TCP é incluída no SPN, é necessário que o SQL Server habilite o protocolo TCP para que um usuário se conecte usando a autenticação Kerberos.
MSSQLSvc/fqdn:port | O SPN padrão gerado pelo provedor quando o protocolo TCP é usado. port é um número de porta TCP. |
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:InstanceName | O SPN padrão gerado pelo provedor para uma instância nomeada quando um protocolo diferente de TCP é usado. InstanceName é o nome de uma instância do SQL Server. |
Registro automático de SPN
Quando uma instância do Mecanismo de Banco de Dados do SQL Server é iniciada, o SQL Server tenta registrar o SPN para o serviço SQL Server. Quando a instância é interrompida, o SQL Server tenta cancelar o registro do SPN. Para uma conexão TCP/IP, o SPN é registrado no formato MSSQLSvc/<FQDN>:<tcpport>. As instâncias nomeadas e a instância padrão são registradas como MSSQLSvc, contando com o <valor tcpport> para diferenciar as instâncias.
Para outras conexões que dão suporte ao Kerberos, o SPN é registrado no formato MSSQLSvc/<FQDN>:<instancename> para uma instância nomeada. O formato para registrar a instância padrão é MSSQLSvc/<FQDN>.
Talvez seja necessária a intervenção manual para registrar ou cancelar o SPN se a conta do serviço não tiver as permissões necessárias para essas ações.
Registro manual de SPN
Para registrar o SPN manualmente, o administrador deve usar a ferramenta Setspn.exe fornecida com as Ferramentas de Suporte do Microsoft Windows Server 2003. Para obter mais informações, veja o artigo da Base de Dados de Conhecimento sobre Ferramentas de suporte do Windows Server 2003 Service Pack 1 .
O Setspn.exe é uma ferramenta de linha de comando que permite ao usuário ler, modificar e excluir a propriedade de diretório SPN (Nome da Entidade de Serviço). Essa ferramenta também permite ao usuário exibir os SPNs atuais, redefinir SPNs padrão da conta e adicionar ou excluir SPNs complementares.
O exemplo a seguir ilustra a sintaxe usada para registrar manualmente um SPN para uma conexão TCP/IP.
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
Observação Se já houver um SPN, ele deverá ser excluído antes de registrá-lo. É possível fazer isso usando o comando setspn
juntamente com a opção -D
. Os exemplos a seguir ilustram como registrar manualmente um novo SPN com base em instância. Para uma instância padrão, use:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname
Para uma instância nomeada, use:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname
Conexões cliente
Há suporte para SPNs especificados pelo usuário nos drivers cliente. Entretanto, se um SPN não for fornecido, será gerado automaticamente com base no tipo de conexão cliente. Para uma conexão TCP, um SPN no formato MSSQLSvc/FQDN:[port] é usado tanto para instâncias nomeadas quanto para instâncias padrão.
Para pipes nomeados e conexões de memória compartilhada, um SPN no formato MSSQLSvc/FQDN:instancename é usado para uma instância nomeada e oFQDNdo MSSQLSvc/ é usado para a instância padrão.
Usando uma conta de serviço como um SPN
Contas de serviço podem ser usadas como um SPN. Elas são especificadas pelo atributo de conexão para autenticação de Kerberos e têm os seguintes formatos:
username@domain ou domain\username para uma conta de usuário de domínio
machine$@domain ou host\FQDN para uma conta de domínio de computador, como Sistema Local ou SERVIÇOS DE REDE.
Para determinar o método de autenticação de uma conexão, execute a seguinte consulta.
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Padrões de autenticação
A tabela a seguir descreve os padrões de autenticação usados com base em cenários de registro de SPN.
Cenário | Método de autenticação |
---|---|
O SPN faz o mapeamento para a conta de domínio correta, conta virtual, MSA ou conta interna. Por exemplo, Sistema Local ou SERVIÇO DE REDE. Observação: Correto significa que a conta mapeada pelo SPN registrado é a conta na qual o serviço SQL Server está em execução. |
Conexões locais usam NTLM, conexões remotas usam Kerberos. |
O SPN faz o mapeamento para a conta de domínio correta, conta virtual, MSA ou conta interna. Observação: Correto significa que a conta mapeada pelo SPN registrado é a conta na qual o serviço SQL Server está em execução. |
Conexões locais usam NTLM, conexões remotas usam Kerberos. |
O SPN faz o mapeamento para a conta de domínio incorreta, conta virtual, MSA ou conta interna. | A autenticação falha. |
A pesquisa de SPN falha ou não faz o mapeamento para uma conta de domínio correta, conta virtual, MSA ou conta interna ou não é uma conta de domínio correta, conta virtual, MSA ou conta interna. | Conexões locais e remotas usam NTLM. |
Comentários
A DAC (Conexão de Administrador Dedicada) usa um SPN com base no nome da instância. A autenticação Kerberos poderá ser usada com DAC se o SPN tiver sido registrado com êxito. Como alternativa, um usuário poderá especificar o nome de conta como um SPN.
Se o registro de SPN falhar durante a inicialização, essa falha será registrada no log de erros do SQL Server e a inicialização continuará.
Se o cancelamento de registro do SPN falhar durante o desligamento, essa falha será registrada no log de erros do SQL Server e o desligamento prosseguirá.
Consulte Também
Suporte a SPN (Nome da entidade de serviço) em conexões com o cliente
SPNs (Nomes da Entidade de Serviço) em conexões de cliente (OLE DB)
SPNs (Nomes da Entidade de Serviço) em conexões de cliente (ODBC)
Recursos do SQL Server Native Client
Gerenciar problemas de autenticação Kerberos em um ambiente do Reporting Services