Status der Dienstprinzipalnamen-Konfiguration

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

Dieser Monitor überprüft den Status der Dienstprinzipalnamen-Konfiguration der Microsoft® SQL Server™-Instanz.

Knowledge Base article:

Zusammenfassung

Dieser Monitor überprüft die Konfiguration des Dienstprinzipalnamens (Service Principal Name, SPN) einer Microsoft® SQL Server™-Instanz. Dazu werden SQL Server-Dienst- und Domänencontrollerkonfigurationen verglichen.

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

Ursachen

Ein Dienstprinzipalname (SPN) für das SQL Server-Datenbankmodul fehlt, wurde falsch verwendet oder ist ein Duplikat von anderen SPNs, die im Active Directory der Domäne konfiguriert wurden.

Hinweis: Ein falsch verwendeter SPN ist ein SPN, der auf dem falschen Konto in Active Directory konfiguriert wurde.

Lösungen

Die Programme setspn.exe und klist.exe können möglicherweise verwendet werden, um das Problem zu beheben.

Beide Tools werden mit Windows Server 2008 und höher ausgeliefert. Für vorherige Windows-Versionen müssen Sie diese getrennt aus dem Microsoft Download Center herunterladen oder aus dem Windows Support Tools-Paket erhalten.

Fall 1: Lösen eines fehlenden SPN:

1. Führen Sie den folgenden Befehl aus, um den fehlenden SPN hinzuzufügen:

setspn –S <SPN> <Konto>

2. Versuchen Sie, SQL Server erneut mit Ihrer Clientanwendung zu verbinden.

Sie können auch die Parameter "/S" oder "–A" für den Befehl "setspn" verwenden. Letzterer wird zwar bald nicht mehr unterstützt, funktioniert aber noch in älteren Windows Server-Versionen (2012, 2012 R2).

Hinweis: Bei Verwendung eines virtuellen Kontos (wie z. B. "Lokales System" oder "NT-Dienst\MSSQL Server") sollte der Computerhostname den <Account>-Wert für den setspn-Befehl bereitstellen. Alternativ dazu können Sie auch angemessene Berechtigungen für das SQL-Dienstkonto bereitstellen, damit die erforderlichen SPNs durch SQL automatisch generiert werden können.

Hinweis: Ein fehlender SPN führt möglicherweise nicht zu einem Konnektivitätsfehler, verhindert aber, dass die Anwendung die Kerberos-Authentifizierung verwendet.

Fall 2: Auflösen eines falsch verwendeten SPN:

1. Führen Sie den folgenden Befehl aus, um den falsch verwendeten SPN zu entfernen:

setspn –D <SPN> <Konto>

2. Melden Sie sich auf dem Clientcomputer ab, und melden Sie sich wieder an, bzw. löschen Sie den Kerberos-Ticketcache, indem Sie den folgenden Befehl ausführen:

klist-Bereinigung

3. Versuchen Sie über Ihre Clientanwendung erneut eine Verbindung mit SQL Server herzustellen.

Hinweis: Wenn Sie Kerberos von Ihrer Anwendung aus verwenden möchten, müssen Sie den richtigen SPN mithilfe der Lösung des oben genannten Falls 1 konfigurieren.

Fall 3: Auflösen eines doppelten SPN:

1. Identifizieren Sie die SPNs, die doppelt sind und entfernt werden müssen.

2. Führen Sie den folgenden Befehl aus, um alle doppelten SPNs zu entfernen:

setspn –D <SPN> <Konto>

3. Melden Sie sich auf dem Clientcomputer ab, und melden Sie sich wieder an, bzw. löschen Sie den Kerberos-Ticketcache, indem Sie den folgenden Befehl ausführen:

klist-Bereinigung

4. Versuchen Sie über Ihre Clientanwendung erneut eine Verbindung mit SQL Server herzustellen.

Extern

Möglicherweise kommt es zu Konnektivitätsproblemen mit SQL Server, wenn SPNs falsch konfiguriert sind

Überschreibbare Parameter

Name

Beschreibung

Standardwert

Warnungspriorität

Definiert die Warnungspriorität.

Normal

Warnungsschweregrad

Definiert den Warnungsschweregrad.

Warnung

Aktiviert

Aktiviert oder deaktiviert den Workflow.

Ja

Generiert Warnungen

Definiert, ob der Workflow eine Warnung generiert.

Ja

Intervall (Sekunden)

Das periodische Intervall in Sekunden, in dem der Workflow ausgeführt werden soll.

900

Suchbereich

Verwenden Sie die LDAP-Suche, wenn der Suchbereich die Domäne oder eine Organisationseinheit ist. Wenn der Suchbereich die Gesamtstruktur ist, kann die Abfrage mithilfe einer Suche im globalen Katalog (GC) innerhalb jeder Partition aufgelöst werden. Werteliste: LDAP GC

LDAP

Synchronisierungszeit

Die in einem 24-Stunden-Format angegebene Synchronisierungszeit. Kann ausgelassen werden.

 

Timeout (Sekunden)

Gibt die Zeit an, die der Workflow ausgeführt werden darf, bevor er geschlossen und als fehlgeschlagen markiert wird.

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 kann nicht mithilfe von Kerberos authentifizieren, da der Dienstprinzipalname (SPN) fehlt, falsch verwendet oder dupliziert wurde.
SQL Server kann keine Authentifizierung mithilfe von Kerberos durchführen, weil der Dienstprinzipalname (SPN) fehlt, falsch verwendet wird oder doppelt vorliegt.
Dienstkonto: {0}
Fehlende SPNs: {1}
Falsch platzierte SPNs: {2}
Doppelte SPNs: {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>