Registrieren eines Dienstprinzipalnamens für Kerberos-VerbindungenRegister a Service Principal Name for Kerberos Connections

Die Kerberos-Authentifizierung kann mit SQL ServerSQL Server verwendet werden, wenn die beiden folgenden Bedingungen erfüllt sind:To use Kerberos authentication with SQL ServerSQL Server requires both the following conditions to be true:

  • Der Client- und der Servercomputer müssen Teil der gleichen Windows-Domäne sein oder sich in vertrauenswürdigen Domänen befinden.The client and server computers must be part of the same Windows domain, or in trusted domains.

  • 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.A Service Principal Name (SPN) must be registered with Active Directory, which assumes the role of the Key Distribution Center in a Windows domain. Der Dienstprinzipalname wird, wenn er registriert wurde, dem Windows-Konto zugeordnet, mit dem der SQL ServerSQL Server -Instanzendienst gestartet wurde.The SPN, after it is registered, maps to the Windows account that started the SQL ServerSQL Server instance service. 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.If the SPN registration has not been performed or fails, the Windows security layer cannot determine the account associated with the SPN, and Kerberos authentication will not be used.

    Hinweis

    Wenn der Server den Dienstprinzipalnamen nicht automatisch registrieren kann, muss der Dienstprinzipalname manuell registriert werden.If the server cannot automatically register the SPN, the SPN must be registered manually. Siehe Manuelle SPN-Registrierung.See Manual SPN Registration.

    Durch Abfragen der dynamischen Verwaltungssicht sys.dm_exec_connections können Sie überprüfen, ob eine Verbindung Kerberos verwendet.You can verify that a connection is using Kerberos by querying the sys.dm_exec_connections dynamic management view. Führen Sie die folgende Abfrage aus, und überprüfen Sie den Wert der Spalte auth_scheme, der "KERBEROS" lautet, wenn Kerberos aktiviert ist.Run the following query and check the value of the auth_scheme column, which will be "KERBEROS" if Kerberos is enabled.

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;  

Tipp

MicrosoftMicrosoft Kerberos-Konfigurations-Manager für SQL ServerSQL Server ist ein Diagnosetool zur Behebung Kerberos-bezogener Verbindungsprobleme bei SQL ServerSQL Server. MicrosoftMicrosoft Kerberos Configuration Manager for SQL ServerSQL Server is a diagnostic tool that helps troubleshoot Kerberos related connectivity issues with SQL ServerSQL Server. Weitere Informationen finden Sie unter Microsoft Kerberos-Konfigurations-Manager für SQL Server.For more information, see Microsoft Kerberos Configuration Manager for SQL Server.

Die Rolle des Dienstprinzipalnamens bei der Authentifizierung The Role of the SPN in Authentication

Wenn eine Anwendung eine Verbindung öffnet und die Windows-Authentifizierung verwendet, übergibt der SQL ServerSQL Server Native Client den SQL ServerSQL Server -Computernamen, -Instanznamen und optional einen SPN.When an application opens a connection and uses Windows Authentication, SQL ServerSQL Server Native Client passes the SQL ServerSQL Server computer name, instance name and, optionally, an SPN. Wenn die Verbindung einen Dienstprinzipalnamen übergibt, wird dieser ohne Änderungen verwendet.If the connection passes an SPN it is used without any changes.

Wenn die Verbindung keinen Dienstprinzipalnamen übergibt, wird ein Standard-Dienstprinzipalname basierend auf verwendetem Protokoll, Servernamen und Instanzennamen erstellt.If the connection does not pass an SPN, a default SPN is constructed based on the protocol used, server name, and the instance name.

In beiden Szenarien wird der Dienstprinzipalname an das Schlüsselverteilungscenter gesendet, um ein Sicherheitstoken zum Authentifizieren der Verbindung abzurufen.In both of the preceding scenarios, the SPN is sent to the Key Distribution Center to obtain a security token for authenticating the connection. Wenn kein Sicherheitstoken abgerufen werden kann, verwendet die Authentifizierung NTLM.If a security token cannot be obtained, authentication uses NTLM.

Ein Dienstprinzipalname (SPN, Service Principal Name) ist der Name, über den ein Client eine Instanz eines Diensts eindeutig identifiziert.A service principal name (SPN) is the name by which a client uniquely identifies an instance of a service. Der Kerberos-Authentifizierungsdienst kann einen SPN zum Authentifizieren eines Diensts verwenden.The Kerberos authentication service can use an SPN to authenticate a service. 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.When a client wants to connect to a service, it locates an instance of the service, composes an SPN for that instance, connects to the service, and presents the SPN for the service to authenticate.

Hinweis

Die Informationen in diesem Thema gelten auch für SQL ServerSQL Server -Konfigurationen, die Clustering verwenden.The information that is provided in this topic also applies to SQL ServerSQL Server configurations that use clustering.

Die bevorzugte Methode für die Authentifizierung von Benutzern bei SQL Server ist Windows-Authentifizierung.Windows Authentication is the preferred method for users to authenticate to SQL Server. Clients, die Windows-Authentifizierung verwenden, werden mit NTLM oder Kerberos authentifiziert.Clients that use Windows Authentication are authenticated by either using NTLM or Kerberos. In einer Active Directory-Umgebung wird immer zuerst Kerberos-Authentifizierung ausgeführt.In an Active Directory environment, Kerberos authentication is always attempted first. Die Kerberos-Authentifizierung ist für SQL Server 2005SQL Server 2005 -Clients, die Named Pipes verwenden, nicht verfügbar.Kerberos authentication is not available for SQL Server 2005SQL Server 2005 clients using named pipes.

Berechtigungen Permissions

Beim Starten des DatenbankmodulDatabase Engine -Diensts versucht dieser, den Dienstprinzipalnamen (Service Principal Name, SPN) zu registrieren.When the DatenbankmodulDatabase Engine service starts, it attempts to register the Service Principal Name (SPN). 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.If the account starting SQL Server doesn’t have permission to register a SPN in Active Directory Domain Services, this call will fail and a warning message will be logged in the Application event log as well as the SQL Server error log. Um den SPN zu registrieren, muss DatenbankmodulDatabase Engine unter einem integrierten Konto, z. B. einem lokalen System (nicht empfohlen) oder NETWORK SERVICE, oder unter einem Konto mit Berechtigung zum Registrieren eines SPN, z. B. einem Domänenadministratorkonto, ausgeführt werden.To register the SPN, the DatenbankmodulDatabase Engine must be running under a built-in account, such as Local System (not recommended), or NETWORK SERVICE, or an account that has permission to register an SPN, such as a domain administrator account. Wenn SQL ServerSQL Server unter dem Betriebssystem Windows 7Windows 7 oder Windows Server 2008 R2Windows Server 2008 R2 ausgeführt wird, können Sie SQL ServerSQL Server mit einem virtuellen Konto oder einem verwalteten Dienstkonto (MSA) ausführen.When SQL ServerSQL Server is running on the Windows 7Windows 7 or Windows Server 2008 R2Windows Server 2008 R2 operating system, you can run SQL ServerSQL Server using a virtual account or a managed service account (MSA). Sowohl virtuelle Konten als auch MSAs können einen SPN registrieren.Both virtual accounts and MSA’s can register an SPN. Wird unter SQL ServerSQL Server kein solches Konto ausgeführt, wird der SPN beim Starten nicht registriert, sodass der Domänenadministrator den SPN manuell registrieren muss.If SQL ServerSQL Server is not running under one of these accounts, the SPN is not registered at startup and the domain administrator must register the SPN manually.

Hinweis

Wenn die Windows-Domäne zum Ausführen auf einer geringeren Ebene als der Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2-Funktionsebene konfiguriert ist, verfügt das verwaltete Dienstkonto nicht über die notwendigen Berechtigungen zum Registrieren der SPNs für den SQL Server-DatenbankmodulSQL Server Database Engine -Dienst.When the Windows domain is configured to run at less than the Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2 functional level, then the Managed Service Account will not have the necessary permissions to register the SPNs for the SQL Server-DatenbankmodulSQL Server Database Engine service. Ist die Kerberos-Authentifizierung erforderlich, muss der Domänenadministrator die SQL ServerSQL Server -SPNs über das verwaltete Dienstkonto manuell registrieren.If Kerberos authentication is required, the Domain Administrator should manually register the SQL ServerSQL Server SPNs on the Managed Service Account.

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.The KB article, How to use Kerberos authentication in SQL Server, contains information about how to grant read or write permission to an SPN for an account that is not a Domain Administrator.

Weitere Informationen sind unter Implementieren von eingeschränkter Kerberos-Delegierung mit SQL Server 2008verfügbarAdditional information is available at How to Implement Kerberos Constrained Delegation with SQL Server 2008

SPN-Formate SPN Formats

In SQL Server 2008SQL Server 2008wurde das SPN-Format geändert, um die Kerberos-Authentifizierung unter TCP/IP, Named Pipes und Shared Memory zu unterstützen.Beginning with SQL Server 2008SQL Server 2008, the SPN format is changed in order to support Kerberos authentication on TCP/IP, named pipes, and shared memory. Die folgenden SPN-Formate für benannte und Standardinstanzen werden unterstützt.The supported SPN formats for named and default instances are as follows.

Benannte InstanzNamed instance

  • MSSQLSvc/FQDN:[port|instancename], wobei:MSSQLSvc/FQDN:[port|instancename], where:

    • MSSQLSvc der Dienst ist, der registriert wird.MSSQLSvc is the service that is being registered.

    • FQDN der vollqualifizierte Domänenname des Servers ist.FQDN is the fully qualified domain name of the server.

    • port die TCP-Portnummer ist.port is the TCP port number.

    • instancename der Name der SQL ServerSQL Server -Instanz ist.instancename is the name of the SQL ServerSQL Server instance.

    StandardinstanzDefault instance

  • MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, wobei:MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, where:

    • MSSQLSvc der Dienst ist, der registriert wird.MSSQLSvc is the service that is being registered.

    • FQDN der vollqualifizierte Domänenname des Servers ist.FQDN is the fully qualified domain name of the server.

    • port die TCP-Portnummer ist.port is the TCP port number.

    Beim neuen SPN-Format ist keine Portnummer erforderlich.The new SPN format does not require a port number. Somit können Server mit mehreren Ports oder Protokolle ohne Portnummern Kerberos-Authentifizierung verwenden.This means that a multiple-port server or a protocol that does not use port numbers can use Kerberos authentication.

Hinweis

Bei TCP/IP-Verbindungen, bei denen der TCP-Port im SPN enthalten ist, muss SQL ServerSQL Server das TCP-Protokoll für einen Benutzer aktivieren, um mithilfe der Kerberos-Authentifizierung eine Verbindung herzustellen.In the case of a TCP/IP connection, where the TCP port is included in the SPN, SQL ServerSQL Server must enable the TCP protocol for a user to connect by using Kerberos authentication.

MSSQLSvc/fqdn:portMSSQLSvc/fqdn:port Der vom Anbieter erstellte Standard-SPN, wenn TCP verwendet wird.The provider-generated, default SPN when TCP is used. port ist eine TCP-Portnummer.port is a TCP port number.
MSSQLSvc/fqdnMSSQLSvc/fqdn Der vom Anbieter erstellte Standard-SPN für eine Standardinstanz, wenn ein anderes Protokoll als TCP verwendet wird.The provider-generated, default SPN for a default instance when a protocol other than TCP is used. fqdn ist ein vollqualifizierter Domänenname.fqdn is a fully-qualified domain name.
MSSQLSvc/fqdn/InstanceNameMSSQLSvc/fqdn/InstanceName Der vom Anbieter erstellte Standard-SPN für eine benannte Instanz, wenn ein anderes Protokoll als TCP verwendet wird.The provider-generated, default SPN for a named instance when a protocol other than TCP is used. InstanceName ist der Name einer Instanz von SQL ServerSQL Server.InstanceName is the name of an instance of SQL ServerSQL Server.

Automatische SPN-Registrierung Automatic SPN Registration

Beim Starten einer Instanz von SQL Server-DatenbankmodulSQL Server Database Engine versucht SQL ServerSQL Server , den SPN für den SQL ServerSQL Server -Dienst zu registrieren.When an instance of the SQL Server-DatenbankmodulSQL Server Database Engine starts, SQL ServerSQL Server tries to register the SPN for the SQL ServerSQL Server service. Wird die Instanz beendet, versucht SQL ServerSQL Server , die Registrierung des SPN wieder aufzuheben.When the instance is stopped, SQL ServerSQL Server tries to unregister the SPN. 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.For a TCP/IP connection the SPN is registered in the format MSSQLSvc/<FQDN>:<tcpport>.Both named instances and the default instance are registered as MSSQLSvc, relying on the <tcpport> value to differentiate the instances.

Bei anderen Verbindungen, die Kerberos unterstützen, wird der SPN im Format MSSQLSvc/<FQDN>/<Instanzname> für eine benannte Instanz registriert.For other connections that support Kerberos the SPN is registered in the format MSSQLSvc/<FQDN>/<instancename> for a named instance. Die Standardinstanz wird im folgenden Format registriert: MSSQLSvc/<FQDN>.The format for registering the default instance is 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.Manual intervention might be required to register or unregister the SPN if the service account lacks the permissions that are required for these actions.

Manuelle SPN-Registrierung Manual SPN Registration

Um den SPN manuell zu registrieren, muss der Administrator das Setspn.exe-Tool verwenden, das mit den Microsoft Windows Server 2003Windows Server 2003 -Supporttools geliefert wird.To register the SPN manually, the administrator must use the Setspn.exe tool that is provided with the Microsoft Windows Server 2003Windows Server 2003 Support Tools. Weitere Informationen finden Sie im KB-Artikel Supporttools in Windows Server 2003 Service Pack 1 .For more information, see the Windows Server 2003 Service Pack 1 Support Tools KB article.

Setspn.exe ist ein Befehlszeilentool, mit dem Sie die SPN-Verzeichniseigenschaft lesen, ändern und löschen können.Setspn.exe is a command line tool that enables you to read, modify, and delete the Service Principal Names (SPN) directory property. 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.This tool also enables you to view the current SPNs, reset the account's default SPNs, and add or delete supplemental SPNs.

Im folgenden Beispiel wird die Syntax dargestellt, mit der ein SPN für eine TCP/IP-Verbindung manuell registriert wird.The following example illustrates the syntax used to register manually register an SPN for a TCP/IP connection.

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.Note If an SPN already exists, it must be deleted before it can be reregistered. Verwenden Sie dafür den setspn -Befehl und den -D -Schalter.You do this by using the setspn command together with the -D switch. In den folgenden Beispielen wird veranschaulicht, wie Sie einen neuen instanzbasierten SPN manuell registrieren können.The following examples illustrate how to manually register a new instance-based SPN. Verwenden Sie für die Standardinstanz Folgendes:For a default instance, use:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname  

Verwenden Sie für eine benannte Instanz Folgendes:For a named instance, use:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname  

Clientverbindungen Client Connections

Clienttreiber unterstützen vom Benutzer angegebene SPN.User-specified SPNs are supported in client drivers. Wenn jedoch kein SPN angegeben wurde, wird er auf der Grundlage des Clientverbindungstyps automatisch erstellt.However, if an SPN is not provided, it will be generated automatically based on the type of a client connection. Bei einer TCP-Verbindung wird ein SPN im Format MSSQLSvc/FQDN:[port] sowohl für benannte als auch für Standardinstanzen verwendet.For a TCP connection, an SPN in the format MSSQLSvc/FQDN:[port] is used for both the named and default instances.

Bei Named-Pipes- und Shared-Memory-Verbindungen wird ein SPN im Format MSSQLSvc/FQDN:Instanzname für eine benannte Instanz und im Format MSSQLSvc/FQDN für die Standardinstanz verwendet.For named pipes and shared memory connections, an SPN in the format MSSQLSvc/FQDN:instancename is used for a named instance and MSSQLSvc/FQDN is used for the default instance.

Verwenden eines Dienstkontos als SPNUsing a service account as an SPN

Dienstkonten können als SPN verwendet werden.Service accounts can be used as an SPN. Sie werden durch das Verbindungsattribut für die Kerberos-Authentifizierung angegeben und liegen in den folgenden Formaten vor:They are specified through the connection attribute for the Kerberos authentication and take the following formats:

  • username@domain oder Domäne\Benutzername für ein Domänenbenutzerkontousername@domain or domain\username for a domain user account

  • Computer$@domain oder Host\FQDN für ein Computerdomänenkonto, z.B. Lokales System oder NETWORK SERVICES.machine$@domain or host\FQDN for a computer domain account such as Local System or NETWORK SERVICES.

    Um die Authentifizierungsmethode einer Verbindung zu bestimmen, führen Sie die folgende Abfrage aus.To determine the authentication method of a connection, execute the following query.

SELECT net_transport, auth_scheme   
FROM sys.dm_exec_connections   
WHERE session_id = @@SPID;  

Authentifizierungsstandardwerte Authentication Defaults

In der folgenden Tabelle werden die Authentifizierungsstandardwerte beschrieben, die auf Grundlage von SPN-Registrierungsszenarios verwendet werden.The following table describes the authentication defaults that are used based on SPN registration scenarios.

SzenarioScenario AuthentifizierungsmethodeAuthentication method
Der SPN ist dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto zugeordnet.The SPN maps to the correct domain account, virtual account, MSA, or built-in account. Beispiel: Lokales System oder NETWORK SERVICE.For example, Local System or NETWORK SERVICE. Lokale Verbindungen verwenden NTLM, Remoteverbindungen verwenden Kerberos.Local connections use NTLM, remote connections use Kerberos.
Der SPN entspricht dem richtigen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto.The SPN is the correct domain account, virtual account, MSA, or built-in account. Lokale Verbindungen verwenden NTLM, Remoteverbindungen verwenden Kerberos.Local connections use NTLM, remote connections use Kerberos.
Der SPN ist einem falschen Domänenkonto, virtuellen Konto, MSA oder integrierten Konto zugeordnet.The SPN maps to an incorrect domain account, virtual account, MSA, or built-in account Die Authentifizierung schlägt fehl.Authentication fails.
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.The SPN lookup fails or does not map to a correct domain account, virtual account, MSA, or built-in account, or is not a correct domain account, virtual account, MSA, or built-in account. Lokale Verbindungen und Remoteverbindungen verwenden NTLM.Local and remote connections use 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.'Correct' means that the account mapped by the registered SPN is the account that the SQL Server service is running under.

Kommentare Comments

Die dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) verwendet einen auf Instanznamen basierenden SPN.The Dedicated Administrator Connection (DAC) uses an instance name based SPN. Die Kerberos-Authentifizierung kann mit einer DAC verwendet werden, wenn dieser SPN erfolgreich registriert wurde.Kerberos authentication can be used with a DAC if that SPN is registered successfully. Alternativ kann ein Benutzer den Kontonamen als SPN festlegen.As an alternative a user can specify the account name as an SPN.

Wenn die SPN-Registrierung beim Starten fehlschlägt, wird dieser Fehler im Fehlerprotokoll von SQL ServerSQL Server aufgezeichnet, und der Startvorgang wird fortgesetzt.If SPN registration fails during startup, this failure is recorded in the SQL ServerSQL Server error log, and startup continues.

Wenn die Aufhebung der SPN-Registrierung beim Herunterfahren fehlschlägt, wird dieser Fehler im Fehlerprotokoll von SQL ServerSQL Server aufgezeichnet, und das Herunterfahren wird fortgesetzt.If SPN de-registration fails during shutdown, this failure is recorded in the SQL ServerSQL Server error log, and shutdown continues.

Siehe auchSee Also

Unterstützung von Dienstprinzipalnamen (SPN) in Clientverbindungen Service Principal Name (SPN) Support in Client Connections
Dienstprinzipalnamen (SPN) in Clientverbindungen (OLE DB) Service Principal Names (SPNs) in Client Connections (OLE DB)
Dienstprinzipalnamen (SPN) in Clientverbindungen (ODBC) Service Principal Names (SPNs) in Client Connections (ODBC)
SQL Server Native Client-Funktionen SQL Server Native Client Features
Behandeln von Problemen mit der Kerberos-Authentifizierung in einer Reporting Services-UmgebungManage Kerberos Authentication Issues in a Reporting Services Environment