Registrando um nome da entidade de serviço
Um SPN (nome da entidade de serviço) é o nome pelo qual um cliente identifica exclusivamente uma instância de 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 às configurações do SQL Server que usam clustering. |
A Autenticação do Windows é o método preferencial de autenticação de usuários no SQL Server. Os clientes que usam a Autenticação do Windows são autenticados com o sistema NTLM ou Kerberos. Em um ambiente Active Directory, a autenticação Kerberos é sempre a primeira tentativa. A autenticação Kerberos não está disponível para clientes SQL Server 2000 e SQL Server 2005 que usam pipes nomeados.
Permissões
Quando o serviço Mecanismo de Banco de Dados é iniciado, ele tenta registrar o SPN (nome da entidade de serviço). Se a conta que inicia o SQL Server não tiver permissão para registrar um SPN nos Serviços de Domínio Active Directory, essa chamada falhará e uma mensagem de erro será registrada no log de eventos do aplicativo, bem como no log de erros do SQL Server. Para registrar o SPN, é necessário que o Mecanismo de Banco de Dados esteja sendo executado em uma conta interna, como Sistema Local (não recomendado) ou NETWORK SERVICE, ou uma conta com permissão para registrar um SPN, como uma conta de administrador do domínio. 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.
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 é um Administrador de Domínio.
Informações adicionais estão disponíveis em How to Implement Kerberos Constrained Delegation with SQL Server 2008 (em inglês)
Formatos de SPN
A partir do SQL Server 2008, o formato de SPN foi alterado para oferecer 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: [porta**|**nome_da_instância], onde:
MSSQLSvc é o serviço que está sendo registrado.
FQDN é o nome de domínio completamente qualificado do servidor.
porta é o número da porta de TCP.
nome_da_instância é o nome da instância do SQL Server.
Instância padrão
MSSQLSvc/FQDN:porta**|**MSSQLSvc/FQDN, onde:
MSSQLSvc é o serviço que está sendo registrado.
FQDN é o nome de domínio completamente qualificado do servidor.
porta é o número da porta de 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 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 a um usuário para que ele se conecte usando a autenticação Kerberos. |
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 do SQL Server. Quando a instância é interrompida, o SQL Server tenta cancelar o SPN. Para uma conexão TCP/IP, o SPN é registrado no formato MSSQLSvc/<FQDN>:<tcpporta>. Tanto as instâncias nomeadas quanto as instâncias padrão são registradas como MSSQLSvc, dependendo do valor <tcpport> para fazer a diferenciação entre as instâncias.
Para outras conexões que oferecem suporte a Kerberos, o SPN é registrado no formato MSSQLSvc/<FQDN>:<nome_da_instância> para uma instância nomeada. O formato para registrar uma 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 um SPN manualmente, é necessário que o administrador use a ferramenta Setspn.exe fornecida com as Ferramentas de Suporte do Microsoft Windows Server 2003. Essas ferramentas estão incluídas no Windows Server 2003 Service Pack 1 (SP1). Para obter mais informações, consulte o artigo da Base de Dados de Conhecimento Windows Server 2003 Service Pack 1 Support Tools.
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: [porta] é 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:nome_da_instância é usado para uma instância nomeada e MSSQLSvc/FQDN é 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:
nome_do_usuário@domínio ou domínio\nome_do_usuário para uma conta de usuário de domínio
máquina$@domínio ou host\FQDN para uma conta de domínio de computador, como Sistema Local ou NETWORK SERVICES.
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 de SPN.
Cenário |
Método de autenticação |
---|---|
O SPN faz o mapeamento para o domínio correto 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 do SQL Server está em execução.
|
Conexões locais usam NTLM, conexões remotas usam Kerberos. |
O SPN é o domínio correto ou a conta interna.
Observação
Correto significa também que a conta mapeada pelo SPN registrado é a conta na qual o serviço do SQL Server está em execução.
|
Conexões locais e remotas usam Kerberos. |
O SPN faz o mapeamento para um domínio ou conta interna incorretos |
A autenticação falha. |
A pesquisa de SPN falha ou não faz o mapeamento para um domínio ou conta interna corretos, ou não é um domínio ou uma conta interna corretos. |
Conexões locais e remotas usam NTLM. |
Commentários
A conexão de administrador dedicada (DAC) usa um SPN com base em nome de instância no SQL Server 2008. A autenticação de Kerberos poderá ser usada com DAC se SPN for 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 SPN falhar durante o desligamento, essa falha será registrada no log de erros do SQL Server e o desligamento prosseguirá.
Consulte também