Registrar um nome da entidade de serviço para conexões de Kerberos

Aplica-se: SQL Server

Para usar a autenticação Kerberos com o SQL Server, as duas condições a seguir devem ser verdadeiras:

  • 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 da instância do SQL Server. Se o registro do SPN não tiver sido realizado ou tiver falhado, a camada de segurança do Windows não poderá determinar a conta associada ao SPN e a autenticação Kerberos não será usada.

    Observação

    Se o servidor não puder registrar automaticamente o SPN, será necessário registrá-lo manualmente. Veja Registro manual de SPN.

Você pode verificar se uma conexão está usando o 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 é KERBEROS quando o Kerberos está 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 é o nome pelo qual um cliente identifica de forma exclusiva 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 neste artigo também se aplicam às 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 por NTLM ou Kerberos. Em um ambiente do Active Directory, a autenticação Kerberos é sempre tentada primeiro.

Permissões

Quando o serviço do Mecanismo de Banco de Dados é iniciado, ele tenta registrar o SPN (nome da entidade de serviço). Suponha que a conta que está iniciando o SQL Server não tenha permissão para registrar um SPN no Active Directory Domain Services. Nesse caso, essa chamada falha, e uma mensagem de aviso é registrada no log de eventos do aplicativo e no log de erros do SQL Server.

Para registrar o SPN, o Mecanismo de Banco de Dados deve estar sendo executado em uma conta interna, como Local System (não recomendado), ou NETWORK SERVICE, ou em uma conta que tenha permissão para registrar um SPN. Você pode registrar um SPN usando uma conta de administrador de domínio, mas isso não é recomendado em um ambiente de produção. Você pode executar o SQL Server usando uma conta virtual ou uma conta de serviço gerenciado (MSA). Tanto as contas virtuais quanto as MSAs podem registrar um SPN. Se o SQL Server não estiver em execução em uma dessas contas, o SPN não será registrado na inicialização, e o administrador do domínio deverá registrar o SPN manualmente.

Formatos de SPNs

O formato do SPN oferece 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.
Formato de SPN Descrição
MSSQLSvc/<FQDN>:<port> 1 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.

1 O formato do SPN não exige um número de porta. Um servidor de várias portas, ou um protocolo que não usa números de porta, ainda pode usar a autenticação Kerberos.

Para uma conexão TCP/IP, em que a porta TCP está incluída no SPN, o SQL Server deve habilitar o protocolo TCP para que um usuário se conecte usando a autenticação Kerberos.

Registro automático do 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>. Tanto as instâncias nomeadas quanto a instância padrão são registradas como MSSQLSvc, dependendo do valor de <tcpport> para diferenciá-las.

Para outras conexões compatíveis com 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>.

Para dar permissões à conta de inicialização do SQL Server para registrar e modificar o SPN, execute as seguintes etapas:

  1. Na máquina do Controlador de Domínio, navegue até Usuários e Computadores do Active Directory.

  2. Selecone Exibir > Avançado.

  3. Em Computadores, localize o computador do SQL Server, clique com o botão direito do mouse e selecione Propriedades.

  4. Selecione a guia Segurança e selecione Avançado.

  5. Na lista, se a conta de inicialização do SQL Server não estiver visível, selecione Adicionar para adicioná-la. Após a adição, realize as seguintes etapas:

    1. Selecione a conta e escolha Editar.

    2. Em Permissões, selecione Gravação de (nome da entidade de serviço) validada.

    3. Role para baixo e, em Propriedades, selecione:

      • Ler servicePrincipalName
      • Gravar servicePrincipalName
    4. Selecione OK duas vezes.

  6. Feche Usuários e Computadores do Active Directory.

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 do SPN

Para registrar o SPN manualmente, você pode usar a ferramenta setspn interna do Windows. O setspn.exe é uma ferramenta de linha de comando que permite ler, modificar e excluir a propriedade de diretório de Nomes de entidades de serviço (SPN). Essa ferramenta também permite ao usuário exibir os SPNs atuais, redefinir SPNs padrão da conta e adicionar ou excluir SPNs complementares.

Para obter mais informações sobre a ferramenta setspn, as permissões necessárias e exemplos de como usá-la, consulte setspn.

O seguinte exemplo ilustra a sintaxe usada para registrar manualmente um SPN para uma conexão TCP/IP usando uma conta de usuário de domínio:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname

Observação

Se já houver um SPN, ele deverá ser excluído antes de ser registrado novamente. Você faz isso usando setspn 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 que usa uma conta de usuário de domínio, use:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

Para uma instância nomeada, use:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Para obter mais informações sobre as configurações de Grupos de Disponibilidade AlwaysOn, confira Ouvintes e Kerberos (SPNs).

Conexões de cliente

Há suporte para SPNs especificados pelo usuário nos drivers cliente. No entanto, se um SPN não for fornecido, ele será gerado automaticamente com base no tipo de conexão do cliente. Para uma conexão TCP, um SPN no formato MSSQLSvc/FQDN:[<port>] é usado para instâncias nomeadas e 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 MSSQLSvc/<FQDN> é usado para a instância padrão.

Usar uma conta de serviço como SPN

Contas de serviço podem ser usadas como um SPN. Elas são especificadas pelo atributo de conexão para autenticação 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 Local System ou NETWORK SERVICE.

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, Local System ou NETWORK SERVICE. 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. 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 correto para uma conta de domínio, 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.

Observação

Correto significa que a conta mapeada pelo SPN registrado é a conta na qual o serviço do SQL Server está em execução.

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 do registro do SPN falhar durante o desligamento, essa falha será registrada no log de erros do SQL Server, e o desligamento continuará.