Vorgehensweise: Aktivieren der Kerberos-Authentifizierung auf einem SQL Server-Failovercluster

Aktualisiert: 15. September 2007

Kerberos ist ein Netzwerkauthentifizierungsprotokoll, das entwickelt wurde, um strenge Authentifizierung für Client/Server-Anwendungen bereitzustellen. Kerberos bietet die Grundlagen für Interoperabilität und verbessert gleichzeitig die Sicherheit der unternehmensweiten Netzwerkauthentifizierung.

Sie können die Kerberos-Authentifizierung mit eigenständigen Instanzen von Microsoft SQL Server 2005 verwenden oder mit Failoverclusterinstanzen, die unter Microsoft Windows 2000 Service Pack 3 (SP3) ausgeführt werden. SQL Server 2005 unterstützt diese Funktionalität als Teil einer typischen Microsoft Windows 2000 Active Directory-Domäneninstallation.

Wenn sich die Netzwerknamenressource, von der SQL Server abhängt, in einem Windows 2000-basierten Cluster befindet, können Sie die Kerberos-Authentifizierung für die Ressource verwenden, nachdem Sie den Computer auf Windows 2000 SP3 aktualisiert haben. Weitere Informationen zum Aktivieren von Kerberos für Servercluster finden Sie im Knowledge Base-Artikel "Kerberos-Unterstützung auf Windows 2000-basierten Serverclustern".

Im folgenden Abschnitt wird beschrieben, wie die Verbindung zu einem Server hergestellt wird, auf dem Microsoft Internetinformationsdienste (IIS, Internet Information Services) ausgeführt wird, um eine Kerberos-Verbindung zu einem Server herzustellen, auf dem SQL Server ausgeführt wird.

Voraussetzungen

Sie können diese Funktionalität nur unter Windows 2000 SP3 nutzen.

Vor dem Ausführen von Setup müssen Sie die Dienstprogramme Kerbtray und SetSPN downloaden.

  • Das Dienstprogramm Kerbtray steht auf der folgenden Microsoft Web site für den Download zur Verfügung. Mit Kerbtray.exe können Sie auf einfache Weise Kerberos-Tickets auf einem der verwendeten zugeordneten Computer überprüfen oder entfernen (oder beides).
  • Das Dienstprogramm SetSPN ist auf der folgenden Microsoft-Website zum Downloaden verfügbar.

SQL Server verwendet nur dann Kerberos, wenn der Client das TCP/IP-Protokoll für die Verbindung mit SQL Server verwendet. Verwendet beispielsweise ein Client das Named Pipes-Protokoll, wird Kerberos nicht verwendet. Sind auf einem Computer mehrere Instanzen von SQL Server vorhanden, müssen Sie für jede Instanz einen Dienstprinzipalnamen (SPN, Service Principal Name) konfigurieren, da jede Instanz von SQL Server einen eindeutigen TCP/IP-Port verwendet.

Aktivieren von Kerberos für SQL Server 2005

Herstellen einer Verbindung zu einem Server, auf dem Microsoft Internetinformationsdienste ausgeführt wird, und Herstellen einer Kerberos-Verbindung zu SQL Server 2005

  1. Schritt 1: Konfigurieren des Domänencontrollers

Führen Sie auf einem Domänencontroller in Active Directory-Benutzer und -Computer Folgendes aus:

  1. Klicken Sie mit der rechten Maustaste auf den Computer, den Sie für die Delegierung einrichten möchten (IIS-Server), und klicken Sie dann auf die Option Computer für Delegierungszwecke vertrauen, um sie zu aktivieren. Wenn der Computer mit SQL Server anscheinend der letzte Computer war, mit dem eine Verbindung hergestellt wurde, dieser Computer jedoch über einen Verbindungsserver verfügt, müssen ihm auch Delegierungsberechtigungen erteilt werden. Ist er nicht der letzte Computer in der Kette, muss allen Zwischencomputern für Delegierungszwecke vertraut werden.
  2. Erteilen Sie dem Domänenbenutzerkonto, das als SQL Server-Dienstkonto dient, die Delegierungsberechtigung. Sie müssen für gruppierte SQL Server-Installationen über ein Domänenbenutzerkonto verfügen (dieser Schritt ist nicht erforderlich für Computer mit SQL Server, die ein lokales Systemkonto verwenden):
    1. Klicken Sie im Ordner Benutzer mit der rechten Maustaste auf das Benutzerkonto, und klicken Sie dann auf Eigenschaften.
    2. Klicken Sie im Dialogfeld mit den Eigenschaften des Benutzerkontos auf die Registerkarte Konto.
    3. Klicken Sie unter Kontooptionen auf das Kontrollkästchen Konto wird für Delegierungszwecke vertraut, um es zu aktivieren. Stellen Sie sicher, dass das Kontrollkästchen Konto ist vertraulich und kann nicht delegiert werden für das Konto deaktiviert ist.
  3. Überprüfen Sie wie folgt mit dem Dienstprogramm Kerbtray.exe, ob Kerberos-Tickets vom Domänencontroller und vom Host empfangen wurden:
    1. Klicken Sie mit der rechten Maustaste auf das Symbol Kerbtray im Infobereich, und klicken Sie dann auf Purge Tickets.
    2. Warten Sie, bis die Farbe des Symbols Kerbtray von grün in gelb geändert wird. Sobald dies geschieht, öffnen Sie ein Eingabeaufforderungsfenster, und führen Sie folgenden Befehl aus:
      net session* /d
      Dadurch werden die vorhandenen Sitzungen gelöscht, und es wird erzwungen, dass eine neue Sitzung erstellt und ein Kerberos-Ticket empfangen wird.

Schritt 2: Konfigurieren des IIS-Servers

  1. Ersetzen Sie die Standardwebsitedateien in Wwwroot durch die Beispiel-ASP-Dateien. Verwenden Sie zum Erstellen der Beispiel-ASP-Dateien den Code aus dem Abschnitt "ASP-Testskript für den Abruf von SQL Server-Daten".
  2. Fügen Sie die Datei dem Ordner Wwwroot hinzu. Verwenden Sie dazu den Beispielcode aus dem Abschnitt "ASP-Testskript für den Abruf von SQL Server-Daten". Speichern Sie die Datei unter Default.asp.
  3. Konfigurieren Sie den Webserver wie folgt neu, sodass nur die integrierte Windows-Authentifizierung verwendet wird:
    1. Klicken Sie mit der rechten Maustaste auf den Standardwebserver, und klicken Sie dann auf den Ordner Sicherheit.
    2. Nehmen Sie im Ordner Sicherheit die richtigen Änderungen vor, und klicken Sie dann auf das Kontrollkästchen Anonymer Zugriff, um es zu deaktivieren.
    3. Führen Sie an einer Eingabeaufforderung folgenden Befehl aus:
      cscript C:\Inetpub\Adminscripts\adsutil.vbs get w3svc/NTAuthenticationProviders
      Wenn die Option zum Aushandeln aktiviert ist, wird Folgendes zurückgegeben:
      NTAuthenticationProviders : (STRING) Negotiate,NTLM
      Weitere Informationen zum Konfigurieren von IIS für die Unterstützung der Kerberos- und der NTLM-Authentifizierung finden Sie im Knowledge Base-Artikel über das Konfigurieren von IIS für die Unterstützung der Kerberos- und der NTLM-Authentifizierung.
    ms189585.note(de-de,SQL.90).gifHinweis:
    Sie müssen Microsoft Data Access (MDAC) 2.8 SP1 oder höher auf dem IIS-Server installieren. Installieren Sie dazu (und um die Tools zum Testen verfügbar zu machen) die Microsoft SQL Server 2000-Clienttools auf dem Webserver. Um MDAC 2.8 SP1 oder höher ohne die Clienttools zu installieren, besuchen Sie die folgende Microsoft-Website.
  4. Überprüfen Sie, ob der Wert HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY in der Registrierung vorhanden ist. Wird der Wert nicht angezeigt, fügen Sie ihn als DSQUERY:Reg_SZ:DBNETLIB hinzu.
  5. Überprüfen Sie wie folgt mit dem Dienstprogramm Kerbtray.exe, ob Kerberos-Tickets vom Domänencontroller und vom Host empfangen wurden:
    1. Klicken Sie mit der rechten Maustaste auf das Symbol Kerbtray im Infobereich, und klicken Sie dann auf Purge Tickets.
    2. Warten Sie, bis die Farbe des Symbols Kerbtray von grün in gelb geändert wird. Sobald dies geschieht, öffnen Sie ein Eingabeaufforderungsfenster, und führen Sie folgenden Befehl aus:
      net session * /d
      Dadurch werden die vorhandenen Sitzungen gelöscht, und es wird erzwungen, dass eine neue Sitzung erstellt und ein Kerberos-Ticket empfangen wird.

Schritt 3: Erstellen eines SPN für SQL Server

ms189585.Caution(de-de,SQL.90).gifVorsicht:
SQL Server verwendet nur dann Kerberos, wenn der Client das TCP/IP-Protokoll für die Verbindung mit SQL Server verwendet. Verwendet beispielsweise ein Client das Named Pipes-Protokoll, wird Kerberos nicht verwendet. Sind auf einem Computer mehrere Instanzen von SQL Server vorhanden, müssen Sie für jede Instanz einen Dienstprinzipalnamen (SPN, Service Principal Name) konfigurieren, da jede Instanz von SQL Server einen eindeutigen TCP/IP-Port verwendet.
ms189585.note(de-de,SQL.90).gifWichtig:
Wenn der SQL Server-Dienst unter dem Konto LocalSystem ausgeführt wird, müssen Sie keinen SPN für SQL Server manuell konfigurieren. Der SPN wird automatisch beim Start des SQL Server-Dienstes erstellt. Wird der SQL Server-Dienst unter einem Domänenbenutzerkonto ausgeführt, müssen Sie manuell einen SPN konfigurieren. Führen Sie dazu die folgenden Schritte aus.

Verwenden Sie zum Konfigurieren eines SPN für SQL Server das Dienstprogramm SETSPN aus dem Microsoft Windows Resource Kit. Das Dienstprogramm SETSPN kann auf der folgenden Microsoft Web site heruntergeladen werden.

Beachten Sie die folgenden Informationen, bevor Sie SETSPN ausführen:

  • Sie müssen Setspn.exe unter einem Anmeldekonto mit den Berechtigungen zum Registrieren des SPN ausführen.
  • Notieren Sie das Domänenbenutzerkonto, unter dem die Instanz von SQL Server ausgeführt wird. In den folgenden Beispielen wird dieses Konto als <SQL_Service_Account> bezeichnet.
    Wichtig Wenn die Instanz von SQL Server unter dem Konto LocalSystem ausgeführt wird, müssen Sie das Dienstprogramm SETSPN nicht ausführen.
  • Sie benötigen den vollqualifizierten Domänennamen (FQDN, Fully Qualified Domain Name) des Computers mit SQL Server. Verwenden Sie das Dienstprogramm ping, um den FQDN des Computers mit SQL Server zu ermitteln. Führen Sie dazu die folgenden Schritte aus:
  1. Pingen Sie den Computer mit SQL wie folgt an, um seine IP-Adresse zu ermitteln:
    C:\>ping MySQLServer
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time=1ms TTL=128
  2. Führen Sie mithilfe von ping -a eine umgekehrte Suche (Reverse Lookup) nach der IP-Adresse aus, um sicherzustellen, dass der FQDN richtig vom DNS-Protokoll (Domain Name System) zurückgegeben wird:
    C:\>ping -a 10.10.10.10
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time<1ms TTL=128
  3. Pingen Sie den Namen der Failoverclusterinstanz, um die IP-Adresse abzurufen, und führen Sie dann ping -a aus, um sicherzustellen, dass der FQDN richtig von DNS zurückgegeben wird.
ms189585.note(de-de,SQL.90).gifHinweis:
In einem System mit Failover-Clusterunterstützung für SQL Server verwenden Sie den FQDN für den Namen der Failoverclusterinstanz. Notieren Sie den genauen TCP/IP-Port, den die Instanz von SQL Server verwendet. Sie können diese Informationen folgendermaßen ermitteln: Öffnen Sie auf dem Computer mit SQL Server den SQL Server-Konfigurations-Manager, klicken Sie auf die Instanz von SQL Server, und zeigen Sie dann die Eigenschaften für das TCP/IP-Protokoll (Standardport) an.

Nachdem Sie das Domänenbenutzerkonto, unter dem der SQL Server-Dienst ausgeführt wird, den FQDN des Computers mit SQL Server und den TCP/IP-Port, den die Instanz von SQL Server verwendet, ermittelt haben, müssen Sie die folgenden Schritte ausführen, um den SPN für SQL Server zu erstellen.

ms189585.note(de-de,SQL.90).gifHinweis:
Sie müssen ein Mitglied der Domänenadministratoren-Gruppe sein, um den Befehl SETSPN ausführen zu können.
  1. Verwenden Sie den folgenden SETSPN-Befehl, wenn Sie SQL Server-Failover-Clusterunterstützung verwenden:
    setspn -A MSSQLSvc/<FQDN> <SQL_Service_Account>
    Wird beispielsweise MySQLServer.MyDomain.com unter dem Domänenbenutzerkonto SQLSVC ausgeführt, wobei MySQLServer.MyDomain.com der Name der gruppierten Instanz von SQL Server 2005 ist, führen Sie den folgenden Befehl aus:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com SQLSVC
  2. Führen Sie für gruppierte ebenso wie für nicht gruppierte Computer mit SQL Server den folgenden SETSPN-Befehl aus, um einen SPN für den Port zu registrieren, den der Computer mit SQL Server verwendet:
    setspn -A MSSQLSvc/<FQDN>:<Port> <SQL_Service_Account>
    Wird beispielsweise MySQLServer.MyDomain.com unter dem Domänenbenutzerkonto SQLSVC an Port 1433 ausgeführt, führen Sie den folgenden Befehl aus:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com:1433 SQLSVC
  3. Nachdem der SPN registriert wurde, müssen Sie seine Registrierung mit dem LIST-Feature (Schalter -L) des Dienstprogramms SETSPN überprüfen. Führen Sie SETSPN -L <SQL_Service_Account> aus, um alle SPNs aufzulisten, die für das Domänenbenutzerkonto registriert sind, unter dem die Instanz von SQL Server ausgeführt wird:
    setspn -L <SQL_Service_Account>
    Wird beispielsweise MySQLServer.MyDomain.com unter dem Domänenbenutzerkonto SQLSVC an Port 1433 ausgeführt, führen Sie den folgenden Befehl aus:
    setspn -A SQLSVC
    Der SPN, den Sie in Schritt 1 (falls SQL Server gruppiert ist) und Schritt 2 (falls SQL Server nicht gruppiert ist) erstellt haben, wird in der folgenden Ausgabe angezeigt:
    C:\>setspn -l SQLSVC
    Registered ServicePrincipalNames for CN=SQLSVC,CN=Users,DC=MyDomain,DC=com:
        MSSQLSvc/MySQLServer.MyDomain.com
        MSSQLSvc/MySQLServer.MyDomain.com:1433
ms189585.note(de-de,SQL.90).gifHinweis:
Wenn Sie SQL Server-Failover-Clusterunterstützung verwenden, müssen Sie einen SPN ohne Portnummer und einen anderen mit Portnummer registrieren. Bei einem typischen, nicht gruppierten Computer mit SQL Server müssen Sie nur den SPN mit der Portnummer registrieren. Es führt jedoch nicht zu Problemen mit nicht gruppierten Computern, wenn Sie einen weiteren SPN ohne Portnummer verwenden.
ms189585.note(de-de,SQL.90).gifHinweis:
Sie können beide SPN-Registrierungen auch mit dem Dienstprogramm Ldifde.exe auf dem Domänencontroller überprüfen. Dies wird im Abschnitt "Sammeln einer Liste von Active Directory-SPN-Informationen" in diesem Thema beschrieben.

Schritt 4: Konfigurieren der Clientcomputer

  1. Überprüfen Sie auf jedem Client, der eine Verbindung herstellen wird, ob Microsoft Internet Explorer für die Verwendung der Windows-Authentifizierung konfiguriert ist:
  2. Klicken Sie in Internet Explorer im Menü Extras auf Internetoptionen.
  3. Klicken Sie auf die Registerkarte Erweitert.
    Klicken Sie unter Sicherheit auf die Option Integrierte Windows-Authentifizierung aktivieren (Neustart erforderlich), um sie auszuwählen, und klicken Sie dann auf OK.

Schritt 5: Testen der Konfiguration

Führen Sie auf jedem beteiligten Computer die folgenden Schritte aus:

  1. Melden Sie sich am Computer an, und überprüfen Sie mit Kerbtray.exe, ob der Computer ein gültiges Kerberors-Ticket vom Domänencontroller abrufen kann.
  2. Entfernen Sie mit Kerbtray.exe alle Tickets auf dem Computer.
  3. Erstellen Sie die Webseite, die die SQL Server-Daten zurückgibt, und stellen Sie eine Verbindung zu der Seite her.
ms189585.note(de-de,SQL.90).gifHinweis:
Ersetzen Sie SQLSERVERNAME durch den Namen des Computers mit SQL Server:
  • Wenn Daten zurückgegeben werden, zeigt diese Seite den Authentifizierungstyp Negotiate an, und die SQL Serverdaten für das Ergebnis der gespeicherten Prozedur sp_helpdb, das eine Liste der auf dem über die .ASP-Seite verbundenen Server vorhandenen Datenbanken zurückgeben sollte.
  • Wenn Sie in SQL Server die Überwachung eingeschaltet haben, sehen Sie im Anwendungsprotokoll, dass die Verbindung "vertraut" ist.

ASP-Testskript für den Abruf von SQL Server-Daten

Im Folgenden ist ein ASP-Testskript für SQL Server-Daten aufgeführt. Wenn Sie dieses Codebeispiel verwenden, müssen Sie SQLSERVERNAME durch den Namen des Computers mit SQL Server ersetzen:

<%@ Language=VBScript %>

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>

<BODY>

<%="'auth_user' is" & request.servervariables("auth_user")%>

<P>

<%="'auth_type' is" & request.servervariables("auth_type")%>

<P>

Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>

<P>

<%

set rs = Server.CreateObject("ADODB.Recordset")

set cn = Server.CreateObject("ADODB.Connection")

cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"

rs.open "MASTER..sp_helpdb",cn

Response.Write cstr(rs.Fields.Count) +"<BR>"

while not rs.EOF

Response.Write cstr(rs(0))+"<BR>"

rs.MoveNext

wend

rs.Close

cn.Close

set rs = nothing ' Frees memory reserved by the recordset.

set cn = nothing ' Frees memory reserved by the connection.

%>

</BODY>

</HTML>

Sammeln einer Liste von Active Directory-SPN-Informationen

Zum Sammeln einer Liste von Active Directory-SPN-Informationen (Service Principal Name, Dienstprinzipalname) geben Sie auf einem der Domänencontroller folgenden Befehl ein, wobei betaland der NetBIOS-Domänenname und NewoutputUsers.txt der Name der Ausgabedatei ist, die Sie für die Ergebnisse verwenden möchten. Wenn Sie keinen vollständigen Pfad verwenden, wird die Datei im aktuellen Ordner gespeichert, in dem Sie die Befehlszeile ausführen. Mit dem folgenden Beispielbefehl wird die gesamte Domäne abgefragt:

ldifde -d "CN=Users,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

Diese Syntax erstellt eine Datei mit dem Namen NewoutputUsers.txt, die Informationen ähnlich der Ausgabe im Abschnitt "Ausgabe auf Domänenebene von NewouputUsers.txt" in diesem Thema enthält.

Die Ausgabe kann äußerst umfangreich werden, wenn Sie die Informationen für eine ganze Domäne sammeln. Daher können Sie mit der folgenden Syntax die gesammelten Informationen auf einen bestimmten Benutzernamen beschränken, wobei User Name der Benutzername und betaland die abgefragte Domäne ist:

ldifde -d "CN=User Name,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

Durch Beschränken der gesammelten Informationen auf einen bestimmten Benutzer wird der Umfang der zu durchsuchenden Daten erheblich reduziert. Wenn Sie die Informationen für eine ganze Domäne sammeln, müssen Sie nach dem bestimmten Benutzernamen des betreffenden Servers suchen. Im Ausgabebeispiel wird Folgendes angezeigt:

  • Einträge für Server, die nicht mehr vorhanden sind, jedoch nicht vollständig aus Active Directory entfernt wurden.
  • Der Benutzer "User Name" besitzt gültige SPN-Informationen zu etwa zehn verschiedenen Servern.

Darüber hinaus können Sie das Tool Active Directory Service Interfaces (ADSI) verwenden, um ungültige Active Directory-Einträge zu korrigieren.

Vorsicht Wenn Sie das ADSI-Bearbeitungs-Snap-In, das Dienstprogramm LDP oder einen anderen Client mit LDAP, Version 3, verwenden und die Attribute von Active Directory-Objekten fehlerhaft ändern, können Sie schwerwiegende Probleme verursachen. Diese Probleme können die Neuinstallation von Microsoft Windows 2000 Server, Microsoft Exchange 2000 Server oder beiden erforderlich machen. Microsoft kann nicht sicherstellen, dass Probleme, die Sie durch fehlerhafte Änderung von Attributen von Active Directory-Objekten verursachen, gelöst werden können. Sie ändern diese Attribute auf eigenes Risiko.

Ausgabe auf Domänenebene von NewouputUsers.txt

dn: CN=User Name,CN=Users,DC=betaland

changetype: add

servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257

servicePrincipalName: MSSQLSvc/INST3.betaland:3616

servicePrincipalName: MSSQLSvc/INST2.betaland:3490

servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433

servicePrincipalName: MSSQLSvc/VSS1.betaland:1433

servicePrincipalName: MSSQLSvc/INST1.betaland:2536

servicePrincipalName: MSSQLSvc/INST4.betaland:3967

servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434

servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433

servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

Siehe auch

Andere Ressourcen

Vorgehensweisen zum Konfigurieren der Verfügbarkeit
Installieren von SQL Server 2005
Aktualisieren auf SQL Server 2005

Hilfe und Informationen

Informationsquellen für SQL Server 2005