Dieser Monitor überprüft den Status der Dienstprinzipalnamen-Konfiguration der Microsoft® SQL Server™-Instanz.
Dieser Monitor überprüft die Konfiguration des Dienstprinzipalnamens (SPN) einer Microsoft® SQL Server™-Instanz. Dies geschieht, indem SQL Server-Dienst- und Domänencontrollerkonfigurationen verglichen werden.
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.
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 –A <SPN> <Account>
2. Versuchen Sie, SQL Server erneut mit Ihrer Clientanwendung zu verbinden.
Alternativ können Sie dem SQL-Dienstkonto die richtigen Berechtigungen bereitstellen, um SQL das automatische Generieren der benötigten SPNs zu ermöglichen.
Hinweis: Ein fehlender SPN führt möglicherweise nicht zu einem Konnektivitätsfehler, hindert aber die Anwendung am Verwenden der Kerberos-Authentifizierung.
Fall 2: Lösen eines falsch verwendeten SPN:
1. Führen Sie den folgenden Befehl aus, um den falsch verwendeten SPN zu entfernen:
setspn –D <SPN> <Account>
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, SQL Server erneut mit Ihrer Clientanwendung zu verbinden.
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: Lösen einen 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> <Account>
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, SQL Server erneut mit Ihrer Clientanwendung zu verbinden.
Möglicherweise treten Verbindungsprobleme zu SQL Server auf, wenn SPNs falsch konfiguriert wurden
Target | Microsoft.SQLServer.2012.DBEngine | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | AvailabilityHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatus | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.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>
</Configuration>
</UnitMonitor>