Stato configurazione nome dell'entità servizio

Microsoft.SQLServer.2016.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.

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

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 il nome dell'entità servizio (SPN) mancante, eseguire il comando seguente:

setspn –S <SPN> <Account>

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

È anche possibile usare il parametro /S o –A per il comando setspn. Sebbene il secondo sia considerato deprecato, può essere ancora usato nelle versioni di Windows Server meno recenti (2012, 2012 R2).

Si noti che nel caso in cui venga usato un account virtuale (ad esempio un account di sistema locale o NT Service\MSSQL Server), il valore <Account> per il comando setspn deve essere presentato dal nome host del computer.

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 usare l'autenticazione Kerberos.

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

1. Per rimuovere il nome dell'entità servizio (SPN) posizionato erroneamente, eseguire il comando seguente:

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 vuole usare Kerberos dall'applicazione è necessario configurare il nome dell'entità servizio (SPN) corretto usando la soluzione del Caso 1 precedente.

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

1. Identificare i nomi SPN duplicati da rimuovere.

2. Per rimuovere ciascun nome dell'entità servizio (SPN) duplicato, eseguire il comando seguente:

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.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Priorità avviso

Definisce la priorità dell'avviso.

Normale

Gravità avviso

Definisce la gravità dell'avviso.

Avviso

Abilitato

Abilita o disabilita il flusso di lavoro.

Genera avvisi

Definisce se il flusso di lavoro genera un avviso.

Intervallo (secondi)

Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro.

900

Ambito della ricerca

Usare la ricerca LDAP quando l'ambito della ricerca è costituito dal dominio o da un'unità organizzativa. Quando l'ambito di una ricerca è la foresta, la query può essere risolta in qualsiasi partizione tramite una ricerca del Catalogo globale. Elenco di valori: LDAP GC

LDAP

Ora di sincronizzazione

Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa.

 

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

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