Partilhar via


Registrar um Service Principal Name para conexões Kerberos

Aplica-se a:SQL Server

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

  • Os computadores cliente e servidor devem fazer parte do mesmo domínio do Windows ou em domínios confiáveis.

  • Um SPN (Nome da Entidade de Serviço) deve ser registrado no Ative Directory, que assume a função do Centro de Distribuição de Chaves em um domínio do Windows. A SPN, após ser registada, é mapeada 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 executado ou falhar, 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, o SPN deverá ser registrado manualmente. Consulte Manual de Registo SPN.

Pode verificar se uma conexão está a usar Kerberos consultando a vista de gerenciamento dinâmico sys.dm_exec_connections. Execute a consulta a seguir e verifique o valor da coluna auth_scheme, que é KERBEROS se o Kerberos estiver habilitado.

SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

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.

O papel 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 do SQL Server, o nome da instância e, opcionalmente, um SPN. Se a conexão passar por um SPN, ela será usada sem alterações.

Se a conexão não passar por um SPN, um SPN padrão será construído com base no protocolo usado, no nome do servidor e no nome da instância.

Em ambos os cenários anteriores, o SPN é enviado para o Centro de Distribuição de Chaves 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á NTLM.

Um SPN é 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, se conecta ao serviço e apresenta o SPN para o serviço autenticar.

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 para 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 Ative Directory, a autenticação Kerberos é sempre tentada primeiro.

Permissões

Quando o serviço Mecanismo de Banco de Dados é iniciado, ele tenta registrar o SPN (Nome da Entidade de Serviço). Suponha que a conta que inicia o SQL Server não tenha permissão para registrar um SPN nos Serviços de Domínio Ative Directory. 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 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 sendo executado 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 SPN

O formato SPN suporta autenticação Kerberos em TCP/IP, pipes nomeados e memória compartilhada. Os formatos SPN suportados para instâncias nomeadas e padrão são os seguintes.

Instância nomeada

  • MSSQLSvc/<FQDN>:[<port> | <instancename>], onde:

    • MSSQLSvc é o serviço que está a ser registado.
    • <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>:<porta> | MSSQLSvc/<FQDN>, onde:

    • MSSQLSvc é o serviço que está a ser registado.
    • <FQDN> é o nome de domínio totalmente qualificado do servidor.
    • <port> é o número da porta TCP.
Formato SPN Descrição
MSSQLSvc/<FQDN>:<port> 1 O SPN padrão gerado pelo provedor quando o 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 SPN não requer 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, onde a porta TCP está incluída no SPN, o SQL Server deve habilitar o protocolo TCP para um usuário se conectar usando a autenticação Kerberos.

Registo SPN automático

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 do 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, confiando no valor <tcpport> para diferenciar as instâncias.

Para outras conexões que suportam 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 conceder 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. Selecione Exibir >Avançado .

  3. Em Computadores, localize o computador do SQL Server e, em seguida, clique com o botão direito do rato 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 listada, selecione Adicionar para adicioná-la. Depois de adicionado, execute as seguintes etapas:

    1. Selecione a conta e selecione Editar.

    2. Em Permissões, selecione Validated Write servicePrincipalName.

    3. Desça e, sob Propriedades, selecione:

      • Leia servicePrincipalName
      • Escreva o servicePrincipalName
    4. Selecione OK duas vezes.

  6. Feche Active Directory Users and Computers.

A intervenção manual pode ser necessária para registrar ou cancelar o registro do SPN se a conta de serviço não tiver as permissões necessárias para essas ações.

Registo manual SPN

Para registrar o SPN manualmente, você pode usar a ferramenta setspn integrada ao Windows. setspn.exe é uma ferramenta de linha de comando que permite ler, modificar e excluir a propriedade de diretório SPN (Service Principal Names). Essa ferramenta também permite visualizar os SPNs atuais, redefinir os SPNs padrão da conta e adicionar ou excluir SPNs suplementares.

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

O exemplo a seguir 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á existir um SPN, este deve ser eliminado antes de poder ser novamente registado. Você faz isso usando setspn com a opção -D. Os exemplos a seguir ilustram como registrar manualmente um novo SPN baseado em instância. Para uma instância padrão usando uma conta de usuário de domínio, use:

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

Para usar uma instância nomeada, utilize:

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

Para obter mais informações sobre configurações de grupo de disponibilidade Always On, consulte Listeners and Kerberos (SPNs).

Conexões de cliente

SPNs especificados pelo usuário são suportados em drivers de 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 as 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

As contas de serviço podem ser usadas como um SPN. Eles são especificados por meio do atributo connection para a autenticação Kerberos e usam 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 consulta a seguir.

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

Cenário Método de autenticação
O SPN corresponde à conta de domínio correta, conta virtual, MSA ou conta interna. Por exemplo, Local System ou NETWORK SERVICE. As conexões locais usam NTLM, as conexões remotas usam Kerberos.
O SPN é a conta de domínio correta, conta virtual, Conta de Serviço Gerenciado (MSA) ou conta interna. As conexões locais usam NTLM, as conexões remotas usam Kerberos.
O SPN mapeia para uma conta de domínio errada, conta virtual, MSA ou conta interna A autenticação falha.
A pesquisa SPN falha ou não é mapeada para uma conta de domínio, conta virtual, MSA ou conta interna correta, ou não é uma conta de domínio, conta virtual, MSA ou conta interna correta. 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á sendo executado.

Comentários

A Conexão de Administrador Dedicado (DAC) usa um SPN baseado em nome de instância. A autenticação Kerberos pode ser usada com um DAC se esse SPN for registrado com êxito. Como alternativa, um usuário pode especificar o nome da conta como um SPN.

Se o registro 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á.