Stato configurazione nome dell'entità servizio

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

Questo monitoraggio controlla lo stato della configurazione del nome dell'entità servizio dell'istanza di Microsoft® SQL Server™.

Knowledge Base article:

Riepilogo

Questo monitoraggio controlla la configurazione del nome dell'entità servizio (SPN) dell'istanza di Microsoft® SQL Server™. Ciò si effettua confrontando le configurazioni del controller di dominio e del servizio SQL Server.

Cause

Un nome dell'entità servizio (SPN) per il motore di database di SQL Server potrebbe essere mancante, erroneamente posizionato o può essere un duplicato di altri nomi dell'entità servizio (SPN) configurati in Active Directory nel dominio.

Nota: un nome dell'entità servizio (SPN) erroneamente posizionato è un nome dell'entità servizio (SPN) configurato per un account non corretto in Active Directory.

Soluzioni

I programmi setspn.exe e klist.exe possono risultare utili per risolvere questo problema.

Entrambi gli strumenti sono inclusi in Windows Server 2008 e versioni successive. Per versioni di Windows precedenti potrebbe essere necessario scaricare tali strumenti separatamente dall'Area download Microsoft od ottenerli dal pacchetto Strumenti di supporto di Windows.

Caso 1: Come risolvere un nome dell'entità servizio (SPN) mancante:

1. Per aggiungere l'SPN mancante, eseguire il comando seguente:

setspn -A <SPN> <Account>

2. Riprovare a connettersi a SQL Server con l'applicazione client in uso.

In alternativa, è possibile fornire le autorizzazioni appropriate all'account del servizio SQL per consentire a SQL di generare automaticamente i nomi SPN necessari.

Nota: un nome dell'entità servizio (SPN) mancante non può generare un errore di connettività ma può impedire all'applicazione di utilizzare l'autenticazione Kerberos.

Caso 2: Come risolvere un nome dell'entità servizio (SPN) erroneamente posizionato:

1. Eseguire il comando seguente per rimuovere il nome dell'entità servizio (SPN) posizionato erroneamente:

setspn -D <SPN> <Account>

2. Nel computer client, disconnettersi ed effettuare nuovamente l'accesso o cancellare la cache del ticket Kerberos eseguendo il comando seguente:

klist purge

3. Riprovare a connettersi a SQL Server con l'applicazione client in uso.

Nota: se si desidera utilizzare Kerberos dall'applicazione è necessario configurare il nome dell'entità servizio (SPN) corretto utilizzando la soluzione del 1 precedente.

Caso 3: Come risolvere un nome dell'entità servizio (SPN) duplicato:

1. Identificare i nomi SPN duplicati da rimuovere.

2. Eseguire il comando seguente per rimuovere ciascun nome dell'entità servizio (SPN) duplicato:

setspn -D <SPN> <Account>

3. Nel computer client, disconnettersi ed effettuare nuovamente l'accesso o cancellare la cache del ticket Kerberos eseguendo il comando seguente:

klist purge

4. Riprovare a connettersi a SQL Server con l'applicazione client in uso.

Risorse esterne

È possibile che si verifichino problemi di connettività a SQL Server se i nomi SPN sono configurati erroneamente

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
Impossibile eseguire l'autenticazione tramite Kerberos perché il nome dell'entità servizio (SPN) è mancante, erroneamente posizionato o duplicato.


Impossibile eseguire l'autenticazione tramite Kerberos perché il nome dell'entità servizio (SPN) è mancante, erroneamente posizionato o duplicato.
Account servizio: {0}
SPN mancanti: {1}
SPN posizionati erroneamente: {2}
SPN duplicati: {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>