Status da configuração do nome da entidade de serviço

Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor (UnitMonitor)

Este monitor verifica o status da configuração do Nome da Entidade de Serviço da instância do Microsoft SQL Server.

Knowledge Base article:

Resumo

Este monitor verifica a configuração do Nome da Entidade de Serviço (SPN) da instância do Microsoft SQL Server. Isso é feito com a comparação das configurações de serviço do SQL Server e do Controlador de Domínio.

Note that the monitor is always in "Healthy" state for non-domain joined machines.

Causas

Um Nome de Entidade de Serviço (SPN) para o Mecanismo de Banco de Dados SQL Server pode estar faltando, no local errado ou é uma duplicata de outros SPNs configurados no Ative Directory do domínio.

Observação: um SPN no local errado é um SPN configurado na conta incorreta no Active Directory.

Resoluções

Os programas setspn.exe e klist.exe podem ser usados para resolver o problema.

Ambas as ferramentas são fornecidas com o Windows Server 2008 e versões posteriores. Para versões anteriores do Windows, você pode precisar baixá-las separadamente do Centro de Download da Microsoft ou obtê-las do pacote das Ferramentas de Suporte do Windows.

Caso 1: Como resolver um SPN ausente:

1. Execute o seguinte comando para adicionar o SPN ausente:

setspn –A <Conta> <SPN>

2. Tente reconectar-se ao SQL Server com o aplicativo cliente.

Você também pode usar o parâmetro /S ou -A para o comando setspn. Embora o último item seja considerado para substituição, ele ainda pode funcionar em versões mais antigas do Windows Server (2012, 2012 R2).

Observe que, em caso de uso de uma conta virtual (como Sistema Local ou NT Service\MSSQL Server), o valor de <Account> para o comando setspn deve ser apresentado pelo nome de host do computador.

Como alternativa, você pode fornecer as permissões adequadas para a Conta de Serviço do SQL para permitir que o SQL gere automaticamente os SPNs necessários.

Observação: um SPN ausente pode não resultar em uma falha de conectividade, mas impedirá que o aplicativo use a autenticação Kerberos.

Caso 2: Como resolver um SPN no local incorreto:

1. Execute o seguinte comando para remover o SPN do local errado:

setspn –D <Conta> <SPN>

2. No computador cliente, faça logoff e logon novamente ou limpe o cache de tíquete Kerberos executando o seguinte comando:

limpar klist

3. Tente reconectar-se ao SQL Server com o aplicativo cliente.

Observação: se você quiser usar Kerberos do seu aplicativo, deverá configurar o SPN correto usando a resolução do Caso 1 acima.

Caso 3: Como resolver um SPN duplicado:

1. Identifique os SPNs que estão duplicados e devem ser removidos.

2. Execute o seguinte comando para remover cada um dos SPNs duplicados:

setspn –D <Conta> <SPN>

3. No computador cliente, faça logoff e logon novamente ou limpe o cache de tíquete Kerberos executando o seguinte comando:

limpar klist

4. Tente reconectar-se ao SQL Server com o aplicativo cliente.

Parâmetros Substituíveis

Nome

Descrição

Valor padrão

Prioridade do Alerta

Define a Prioridade do Alerta.

Normal

Severidade do Alerta

Define a Severidade do Alerta.

Aviso

Habilitado

Habilita ou desabilita o fluxo de trabalho.

Sim

Gerar Alertas

Define se o fluxo de trabalho gera um Alerta.

Sim

Intervalo (segundos)

O intervalo de tempo recorrente em segundos no qual executa-se o fluxo de trabalho.

900

Escopo da pesquisa

Use a pesquisa LDAP quando o escopo de uma pesquisa for o domínio ou uma unidade organizacional. Quando o escopo de uma pesquisa é a floresta, a consulta pode ser resolvida dentro de qualquer partição usando uma pesquisa de Catálogo Global (GC). Lista de valores: LDAP GC

LDAP

Hora da Sincronização

A hora da sincronização especificada usando um formato de 24 horas. Pode ser omitido.

 

Tempo Limite (segundos)

Especifica o tempo que o fluxo de trabalho pode funcionar antes de ser fechado e marcado como com falha.

300

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
Parent MonitorSystem.Health.ConfigurationState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.DBEngine.Configuration.SPNStatus
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: O SQL Server não pode se autenticar usando o Kerberos, pois o Nome da Entidade de Serviço (SPN) está ausente, no local errado ou duplicado.
O SQL Server não pode se autenticar usando o Kerberos, pois o Nome da Entidade de Serviço (SPN) está ausente, no local errado ou duplicado.
Conta de Serviço: {0}
SPNs Ausentes: {1}
SPNs no Local Errado: {2}
SPNs Duplicados: {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/Account$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MissingSpnList']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='MisplacedSpnList']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='DuplicateSpnList']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<ComputerNetworkName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerNetworkName>
<NetbiosComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>