Estado de configuración del nombre principal de servicio

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

Este monitor comprueba el estado de la configuración de nombre principal de servicio de la instancia de Microsoft® SQL Server™.

Knowledge Base article:

Resumen

Este monitor comprueba la configuración de nombre de entidad de seguridad de servicio (SPN) de la instancia de Microsoft® SQL Server™. Para ello, se comparan las configuraciones del servicio SQL Server y del controlador de dominio.

Causas

Un nombre principal de servicio (SPN) para el motor de base de datos de SQL Server puede faltar, estar ubicado incorrectamente o estar duplicado en otros SPN configurados en Active Directory del dominio.

Nota: un SPN ubicado incorrectamente es un SPN configurado en una cuenta incorrecta en Active Directory.

Soluciones

Los programas setspn.exe y klist.exe se pueden usar para solucionar el problema.

Ambas herramientas se incluyen con Windows Server 2008 y versiones posteriores. Para las versiones anteriores de Windows, puede ser necesario descargarlas por separado desde el Centro de descarga de Microsoft u obtenerlas del paquete de herramientas de soporte técnico de Windows.

Caso 1: Cómo resolver un SPN que falta:

1. Ejecute el comando siguiente para agregar el SPN que falta:

setspn –S <SPN> <Account>

2. Intente volver a conectarse a SQL Server con la aplicación cliente.

También se pueden usar los parámetros /S o –A en el comando setspn. Aunque este último se considera en desuso, sigue funcionando en versiones anteriores de Windows Server (2012, 2012 R2).

Tenga en cuenta que si se usa una cuenta virtual (como sistema local o servicio NT\MSSQL Server), el valor <Account> para el comando setspn debe presentarse mediante el nombre de host del equipo. De manera alternativa, puede proporcionar los permisos adecuados a la cuenta de servicio SQL para permitir que SQL genere automáticamente los SPN necesarios.

Nota: Un SPN que falta puede no dar lugar a un error de conexión, pero impedirá que la aplicación use la autenticación Kerberos.

Caso 2: Cómo resolver un SPN ubicado incorrectamente:

1. Ejecute el siguiente comando para quitar el SPN ubicado incorrectamente:

setspn –D <SPN> <Cuenta>

2. En el equipo cliente, cierre la sesión y vuelva a iniciarla o desactive la caché del vale de Kerberos mediante el comando siguiente:

klist purge

3. Intente volver a conectarse a SQL Server con la aplicación cliente.

Nota: Si quiere usar Kerberos desde la aplicación, debe configurar el SPN correcto mediante la solución del caso 1 anterior.

Caso 3: Cómo resolver un SPN duplicado:

1. Identifique los SPN que están duplicados y se deberían quitar.

2. Ejecute el siguiente comando para quitar cada uno de los SPN duplicados:

setspn –D <SPN> <Cuenta>

3. En el equipo cliente, cierre la sesión y vuelva a iniciarla o desactive la caché del vale de Kerberos mediante el comando siguiente:

klist purge

4. Intente volver a conectarse a SQL Server con la aplicación cliente.

Externo

Puede experimentar problemas de conectividad con SQL Server si los SPN no está configurado correctamente

Parámetros invalidables

Nombre

Descripción

Valor predeterminado

Prioridad de alerta

Define la prioridad de la alerta.

Normal

Gravedad de alerta

Define la gravedad de la alerta.

Advertencia

Habilitado

Habilita o deshabilita el flujo de trabajo.

Genera alertas

Define si el flujo de trabajo genera una alerta.

Intervalo (segundos)

Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo.

900

Ámbito de búsqueda

Use la búsqueda LDAP cuando el ámbito de una búsqueda sea el dominio o una unidad organizativa. Cuando el ámbito de una búsqueda sea el bosque, la consulta se puede resolver dentro de cualquier partición mediante una búsqueda en un Catálogo global (GC). Lista de valores: LDAP GC

LDAP

Hora de sincronización

Hora de sincronización especificada en un formato de 24 horas. Se puede omitir.

 

Tiempo de espera (segundos)

Especifica el tiempo durante el que se puede ejecutar el flujo de trabajo antes de que se cierre y se marque como error.

300

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
Parent MonitorSystem.Health.ConfigurationState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.DBEngine.Configuration.SPNStatus
RemotableTrue
AccessibilityPublic
Alert Message
SQL Server no puede autenticar con Kerberos porque el Nombre principal de servicio (SPN) falta, está ubicado incorrectamente o está duplicado.
SQL Server no puede autenticar con Kerberos porque el nombre de entidad de seguridad de servicio (SPN) falta, está ubicado incorrectamente o está duplicado.
Cuenta de servicio: {0}
SPN que faltan: {1}
SPN ubicados incorrectamente: {2}
SPN duplicados: {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.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="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>