Registrieren eines Dienstprinzipalnamens für Kerberos-Verbindungen
Damit die Kerberos-Authentifizierung mit SQL Server verwendet werden kann, müssen die beiden folgenden Bedingungen erfüllt sein:
Der Client- und der Servercomputer müssen Teil der gleichen Windows-Domäne sein oder sich in vertrauenswürdigen Domänen befinden.
Ein Dienstprinzipalname (Service Principal Name, SPN) muss in Active Directory registriert sein. Dieser Dienst nimmt die Rolle des Schlüsselverteilungscenters (KDC) in einer Windows-Domäne an. Der SPN wird nach der Registrierung dem Windows-Konto zugeordnet, das den SQL Server instance-Dienst gestartet hat. Wenn die Registrierung des Dienstprinzipalnamens nicht erfolgt oder dabei ein Fehler aufgetreten ist, kann die Windows-Sicherheitsschicht nicht das Konto bestimmen, das dem Dienstprinzipalname zugewiesen ist. Das bedeutet, die Kerberos-Authentifizierung wird nicht verwendet.
Hinweis
Wenn der Server den Dienstprinzipalnamen nicht automatisch registrieren kann, muss der Dienstprinzipalname manuell registriert werden. Siehe Manuelle SPN-Registrierung.
Durch Abfragen der dynamischen Verwaltungssicht sys.dm_exec_connections können Sie überprüfen, ob eine Verbindung Kerberos verwendet. Führen Sie die folgende Abfrage aus, und überprüfen Sie den Wert der Spalte auth_scheme, der "KERBEROS" lautet, wenn Kerberos aktiviert ist.
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;
Tipp
Microsoft Kerberos Configuration Manager for SQL Server ist ein Diagnosetool zur Behebung Kerberos-bezogener Probleme mit der Verbindung mit SQL Server. Weitere Informationen finden Sie unter Microsoft Kerberos-Konfigurations-Manager für SQL Server.
Die Rolle des Dienstprinzipalnamens bei der Authentifizierung
Wenn eine Anwendung eine Verbindung öffnet und die Windows-Authentifizierung verwendet, übergibt der SQL Server Native Client den SQL Server-Computernamen, -Instanznamen und optional einen Dienstprinzipalnamen. Wenn die Verbindung einen Dienstprinzipalnamen übergibt, wird dieser ohne Änderungen verwendet.
Wenn die Verbindung keinen Dienstprinzipalnamen übergibt, wird ein Standard-Dienstprinzipalname basierend auf verwendetem Protokoll, Servernamen und Instanzennamen erstellt.
In beiden Szenarien wird der Dienstprinzipalname an das Schlüsselverteilungscenter gesendet, um ein Sicherheitstoken zum Authentifizieren der Verbindung abzurufen. Wenn kein Sicherheitstoken abgerufen werden kann, verwendet die Authentifizierung NTLM.
Ein Dienstprinzipalname (SPN, Service Principal Name) ist der Name, über den ein Client eine Instanz eines Diensts eindeutig identifiziert. Der Kerberos-Authentifizierungsdienst kann einen SPN zum Authentifizieren eines Diensts verwenden. Wenn ein Client eine Verbindung zu einem Dienst herstellen möchte, sucht er eine Instanz des Diensts, verfasst einen SPN für diese Instanz, stellt eine Verbindung zum Dienst her und übergibt den SPN zur Authentifizierung an den Dienst.
Hinweis
Die Informationen in diesem Thema gelten auch für SQL Server-Konfigurationen, die Clustering verwenden.
Die bevorzugte Methode für die Authentifizierung von Benutzern bei SQL Server ist Windows-Authentifizierung. Clients, die Windows-Authentifizierung verwenden, werden mit NTLM oder Kerberos authentifiziert. In einer Active Directory-Umgebung wird immer zuerst Kerberos-Authentifizierung ausgeführt. Die Kerberos-Authentifizierung ist für SQL Server 2005-Clients mit Named Pipes nicht verfügbar.
Berechtigungen
Beim Starten des Datenbank-Engine-Diensts versucht dieser, den Dienstprinzipalnamen zu registrieren. Wenn das Konto, das SQL Server startet, nicht über die Berechtigung zum Registrieren eines SPN in den Active Directory-Domänendiensten verfügt, schlägt dieser Aufruf fehl, und im Anwendungsereignisprotokoll sowie im SQL Server-Fehlerprotokoll wird eine Warnmeldung protokolliert. Um den SPN zu registrieren, muss die Datenbank-Engine unter einem integrierten Konto ausgeführt werden, z. B. lokales System (nicht empfohlen) oder NETWORK SERVICE oder ein Konto, das über die Berechtigung zum Registrieren eines SPN verfügt, z. B. ein Domänenadministratorkonto. Wenn SQL Server unter dem Betriebssystem Windows 7 oder Windows Server 2008 R2 ausgeführt wird, können Sie SQL Server mithilfe eines virtuellen Kontos oder eines verwalteten Dienstkontos (Managed Service Account, MSA) ausführen. Sowohl virtuelle Konten als auch MSAs können einen SPN registrieren. Wenn SQL Server nicht unter einem dieser Konten ausgeführt wird, wird der SPN beim Start nicht registriert, und der Domänenadministrator muss den SPN manuell registrieren.
Hinweis
Wenn die Windows-Domäne für die Ausführung auf einer niedrigeren Ebene als der Windows Server 2008 R2-Funktionsebene konfiguriert ist, verfügt das verwaltete Dienstkonto nicht über die notwendigen Berechtigungen zum Registrieren der Dienstprinzipalnamens für den SQL Server-Datenbank-Engine-Dienst. Ist die Kerberos-Authentifizierung erforderlich, muss der Domänenadministrator die Dienstprinzipalnamen für SQL Server manuell im verwalteten Dienstkonto registrieren.
Der KB-Artikel Verwenden der Kerberos-Authentifizierung in SQL Serverenthält Informationen zum Gewähren von Lese- und Schreibberechtigungen für einen SPN für ein Nicht-Domänenadministratorkonto.
Weitere Informationen sind unter Implementieren von eingeschränkter Kerberos-Delegierung mit SQL Server 2008verfügbar
SPN-Formate
In SQL Server 2008wurde das SPN-Format geändert, um die Kerberos-Authentifizierung unter TCP/IP, Named Pipes und Shared Memory zu unterstützen. Die folgenden SPN-Formate für benannte und Standardinstanzen werden unterstützt.
Benannte Instanz
MSSQLSvc/FQDN:[port|instancename], wobei:
MSSQLSvc der Dienst ist, der registriert wird.
FQDN der vollqualifizierte Domänenname des Servers ist.
Port die TCP-Portnummer ist.
Instanzname der Name der SQL Server-Instanz ist.
Standardinstanz
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, wobei:
MSSQLSvc der Dienst ist, der registriert wird.
FQDN der vollqualifizierte Domänenname des Servers ist.
port ist die TCP-Portnummer.
Beim neuen SPN-Format ist keine Portnummer erforderlich. Somit können Server mit mehreren Ports oder Protokolle ohne Portnummern Kerberos-Authentifizierung verwenden.
Hinweis
Bei TCP/IP-Verbindungen, bei denen der TCP-Port im Dienstprinzipalnamen enthalten ist, muss SQL Server das TCP-Protokoll für einen Benutzer aktivieren, um mithilfe der Kerberos-Authentifizierung eine Verbindung herzustellen.
MSSQLSvc/fqdn:port | Der vom Anbieter erstellte Standard-SPN, wenn TCP verwendet wird. port ist eine TCP-Portnummer. |
MSSQLSvc/fqdn | Der vom Anbieter erstellte Standard-SPN für eine Standardinstanz, wenn ein anderes Protokoll als TCP verwendet wird. fqdn ist ein vollqualifizierter Domänenname. |
MSSQLSvc/fqdn:InstanceName | Der vom Anbieter erstellte Standard-SPN für eine benannte Instanz, wenn ein anderes Protokoll als TCP verwendet wird. InstanceName ist der Name einer instance SQL Server. |
Automatische SPN-Registrierung
Beim Starten einer Instanz der SQL Server-Datenbank-Engine versucht SQL Server, den Dienstprinzipalnamen für den SQL Server-Dienst zu registrieren. Wenn die Instanz beendet wird, versucht SQL Server, die Registrierung des Dienstprinzipalnames wieder aufzuheben. Für eine TCP/IP-Verbindung wird der SPN im Format MSSQLSvc/<FQDN>:<tcpport> registriert. Sowohl benannte Instanzen als auch die Standard-instance werden als MSSQLSvc registriert, wobei der <tcpport-Wert> verwendet wird, um die Instanzen zu unterscheiden.
Bei anderen Verbindungen, die Kerberos unterstützen, wird der SPN im Format MSSQLSvc/<FQDN>:<Instanzname> für eine benannte Instanz registriert. Die Standardinstanz wird im folgenden Format registriert: MSSQLSvc/<FQDN>.
Die Registrierung bzw. die Aufhebung der Registrierung eines SPN muss möglicherweise manuell durchgeführt werden, wenn der Dienst nicht über die Berechtigungen für diese Aktionen verfügt.
Manuelle SPN-Registrierung
Um den SPN manuell zu registrieren, muss der Administrator das Setspn.exe-Tool verwenden, das mit den Microsoft Windows Server 2003-Supporttools bereitgestellt wird. Weitere Informationen finden Sie im KB-Artikel Supporttools in Windows Server 2003 Service Pack 1 .
Setspn.exe ist ein Befehlszeilentool, mit dem Sie die SPN-Verzeichniseigenschaft lesen, ändern und löschen können. Mit diesem Tool können Sie auch die aktuellen SPN anzeigen, die Standard-SPN des Kontos zurücksetzen und zusätzliche SPN hinzufügen oder löschen.
Im folgenden Beispiel wird die Syntax dargestellt, mit der ein SPN für eine TCP/IP-Verbindung manuell registriert wird.
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
Hinweis Wenn bereits ein SPN vorhanden ist, muss er gelöscht werden, bevor er erneut registriert werden kann. Verwenden Sie dafür den setspn
-Befehl und den -D
-Schalter. In den folgenden Beispielen wird veranschaulicht, wie Sie einen neuen instanzbasierten SPN manuell registrieren können. Verwenden Sie für die Standardinstanz Folgendes:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname
Verwenden Sie für eine benannte Instanz Folgendes:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname
Clientverbindungen
Clienttreiber unterstützen vom Benutzer angegebene SPN. Wenn jedoch kein SPN angegeben wurde, wird er auf der Grundlage des Clientverbindungstyps automatisch erstellt. Bei einer TCP-Verbindung wird ein SPN im Format MSSQLSvc/FQDN:[port] sowohl für benannte als auch für Standardinstanzen verwendet.
Für Named Pipes und Shared Memory-Verbindungen wird ein SPN im Format MSSQLSvc/FQDN:instancename für eine benannte instance und msSQLSvc/FQDN für den Standard-instance verwendet.
Verwenden eines Dienstkontos als SPN
Dienstkonten können als SPN verwendet werden. Sie werden durch das Verbindungsattribut für die Kerberos-Authentifizierung angegeben und liegen in den folgenden Formaten vor:
Benutzername@Domäne oder Domäne\Benutzername für ein Domänenbenutzerkonto
Computer$@Domäne oder Host\FQDN für ein Computerdomänenkonto, z.B. Lokales System oder NETWORK SERVICES.
Um die Authentifizierungsmethode einer Verbindung zu bestimmen, führen Sie die folgende Abfrage aus.
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Authentifizierungsstandardwerte
In der folgenden Tabelle werden die Authentifizierungsstandardwerte beschrieben, die auf Grundlage von SPN-Registrierungsszenarios verwendet werden.
Szenario | Authentifizierungsmethode |
---|---|
Der SPN ist dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto zugeordnet. Beispiel: Lokales System oder NETWORK SERVICE. Hinweis: Richtig bedeutet, dass das vom registrierten SPN zugeordnete Konto das Konto ist, unter dem der SQL Server Dienst ausgeführt wird. |
Lokale Verbindungen verwenden NTLM, Remoteverbindungen verwenden Kerberos. |
Der SPN entspricht dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto. Hinweis: Richtig bedeutet, dass das vom registrierten SPN zugeordnete Konto das Konto ist, unter dem der SQL Server Dienst ausgeführt wird. |
Lokale Verbindungen verwenden NTLM, Remoteverbindungen verwenden Kerberos. |
Der SPN ist einem falschen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto zugeordnet. | Die Authentifizierung schlägt fehl. |
Die SPN-Suche schlägt fehl, oder der SPN ist nicht dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto zugeordnet bzw. entspricht nicht dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto. | Lokale Verbindungen und Remoteverbindungen verwenden NTLM. |
Kommentare
Die dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) verwendet einen auf Instanznamen basierenden SPN. Die Kerberos-Authentifizierung kann mit einer DAC verwendet werden, wenn dieser SPN erfolgreich registriert wurde. Alternativ kann ein Benutzer den Kontonamen als SPN festlegen.
Wenn die SPN-Registrierung beim Starten nicht erfolgt, wird dieser Fehler im Fehlerprotokoll von SQL Server aufgezeichnet, und der Startvorgang wird fortgesetzt.
Wenn beim Herunterfahren keine Aufhebung der SPN-Registrierung erfolgt, wird dieser Fehler im Fehlerprotokoll von SQL Server aufgezeichnet, und das Herunterfahren wird fortgesetzt.
Siehe auch
Unterstützung von Dienstprinzipalnamen (SPN) in Clientverbindungen
Dienstprinzipalnamen (SPN) in Clientverbindungen (OLE DB)
Dienstprinzipalnamen (SPN) in Clientverbindungen (ODBC)
SQL Server Native Client-Funktionen
Behandeln von Problemen mit der Kerberos-Authentifizierung in einer Reporting Services-Umgebung