Registrieren eines Dienstprinzipalnamens für Kerberos-Verbindungen

Gilt für:SQL Server

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 Dienstprinzipalname wird nach der Registrierung dem Windows-Konto zugeordnet, mit dem der SQL Server-Instanzdienst gestartet wurde. Wenn die Registrierung des Dienstprinzipalnamens fehlerhaft oder gar nicht erfolgt, kann die Windows-Sicherheitsebene das Konto nicht ermitteln, das dem Dienstprinzipalname zugewiesen ist. Die Kerberos-Authentifizierung wird dann nicht verwendet.

    Hinweis

    Wenn der Server den Dienstprinzipalnamen nicht automatisch registrieren kann, muss der Name 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 (9.x)-Clients, die Named Pipes verwenden, nicht verfügbar.

Berechtigungen

Beim Starten des Datenbank-Engine-Diensts versucht dieser, den Dienstprinzipalnamen zu registrieren. Nehmen wir einmal an, das Konto, das SQL Server startet, verfügt nicht über die Berechtigung, einen Dienstprinzipalnamen in Active Directory Domain Services zu registrieren. In diesem Fall tritt bei diesem Aufruf ein Fehler auf, und sowohl im Ereignisprotokoll der Anwendung als auch im SQL Server-Fehlerprotokoll wird eine Warnmeldung protokolliert. Um den Dienstprinzipalnamen zu registrieren, muss die Datenbank-Engine in einem integrierten Konto ausgeführt werden, z. B. einem lokalen System (nicht empfohlen), NETWORK SERVICE oder einem Konto mit Berechtigung zum Registrieren eines Dienstprinzipalnamens. Sie können einen Dienstprinzipalnamen mit einem Domänenadministratorkonto registrieren, dies wird in einer Produktionsumgebung jedoch nicht empfohlen. Unter Windows 7 oder Windows Server 2008 R2 und höher können Sie SQL Server mit einem virtuellen Konto oder einem verwalteten Dienstkonto (Managed Service Account, MSA) ausführen. Sowohl virtuelle Konten als auch MSAs können einen SPN registrieren. Wird SQL Server nicht in einem dieser Konten ausgeführt, wird der Dienstprinzipalname beim Starten nicht registriert und muss vom Domänenadministrator manuell registriert werden.

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.

SPN-Formate

In SQL Server 2008 (10.0.x) wurde 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> | <Instanzname>], 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> die TCP-Portnummer ist.

    Hinweis

    Beim neuen Format für den Dienstprinzipalnamen ist keine Portnummer erforderlich. Somit können Server mit mehreren Ports oder Protokolle ohne Portnummern die Kerberos-Authentifizierung verwenden.

SPN-Format BESCHREIBUNG
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>:<Instanzname> Der vom Anbieter erstellte Standard-SPN für eine benannte Instanz, wenn ein anderes Protokoll als TCP verwendet wird. <Instanzname> ist der Name einer SQL Server-Instanz.

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.

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. Bei TCP/IP-Verbindungen wird der SPN im folgenden Format registriert: MSSQLSvc/<FQDN>:<tcpport>. Sowohl benannte Instanzen als auch die Standardinstanz werden als MSSQLSvc registriert, wobei der <tcpport>-Wert zur Unterscheidung der Instanzen dient.

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>.

So erteilen Sie dem SQL Server-Startkonto die Berechtigung, den SPN zu registrieren und zu ändern:

  1. Starten Sie auf dem Computer mit dem Domänencontroller Active Directory-Benutzer und -Computer.

  2. Wählen Sie Ansicht > Erweitert aus.

  3. Suchen Sie den SQL Server-Computer unter Computer. Klicken Sie dann die rechte Maustaste und wählen Sie Eigenschaften aus.

  4. Wählen Sie die Registerkarte Sicherheit aus, und klicken Sie auf Erweitert.

  5. Wenn das SQL Server-Startkonto nicht in der Liste aufgeführt wird, wählen Sie Hinzufügen aus. Führen Sie die folgenden Schritte aus, nachdem Sie das Konto hinzugefügt haben:

    a. Wählen Sie das Konto und dann Bearbeiten aus.

    b. Wählen Sie unter „Berechtigungen“ die Option Validated Write servicePrincipalName (Überprüfte Schreibberechtigung für servicePrincipalName) aus.

    d. Scrollen Sie nach unten, und wählen Sie unter Eigenschaften die folgenden Optionen aus:

    • Read servicePrincipalName (Leseberechtigung für servicePrincipalName)

    • Write servicePrincipalName (Schreibberechtigung für servicePrincipalName)

    e. Klicken Sie zweimal auf OK.

  6. Schließen Sie Active Directory-Benutzer und -Computer.

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

Mit dem in Windows integrierten Tool Setspn können Sie den SPN auch manuell registrieren. 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.

Weitere Informationen zu Setspn, den erforderlichen Berechtigungen und Verwendungsbeispielen finden Sie unter Setspn.

Das folgende Beispiel veranschaulicht die Syntax, die zur manuellen Registrierung eines SPN für eine TCP/IP-Verbindung unter Verwendung eines Domänenbenutzerkontos zu verwenden ist:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname  

Hinweis

Wenn bereits ein SPN vorhanden ist, muss er gelöscht werden, um ihn erneut registrieren zu können. 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 eine Standardinstanz mit einem Domänenbenutzerkonto Folgendes:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname  

Verwenden Sie für eine benannte Instanz Folgendes:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname  

Weitere Informationen zur Konfiguration von Always On Verfügbarkeitsgruppen finden Sie unter Listener und Kerberos (SPNs).

Clientverbindungen

Clienttreiber unterstützen vom Benutzer angegebene SPN. Wenn jedoch kein Dienstprinzipalname angegeben wurde, wird anhand des Clientverbindungstyps automatisch ein solcher 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 Verbindungen mit Named Pipes und gemeinsam genutzten Speicherbereichen wird für eine benannte Instanz ein SPN im Format MSSQLSvc/<FQDN>:<Instanzname> und für die Standardinstanz MSSQLSvc/<FQDN> 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. Lokale Verbindungen verwenden NTLM, Remoteverbindungen verwenden Kerberos.
Der SPN entspricht dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto. 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.
Bei der SPN-Suche tritt ein Fehler auf, 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.

Hinweis

"Richtig" bedeutet in diesem Fall, dass es sich bei dem Konto, das dem registrierten SPN zugeordnet ist, um das Konto handelt, unter dem der SQL Server-Dienst ausgeführt wird.

Kommentare

Die dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) verwendet einen Dienstprinzipalnamen, der auf dem Instanznamen basiert. 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