Delen via


Fout 'Kan geen SSPI-context genereren' bij het gebruik van Windows-verificatie om verbinding te maken met SQL Server

Van toepassing op: SQL Server
Origineel KB-nummer: 811889

Samenvatting

Dit artikel helpt u bij het oplossen van problemen met de fout 'Kan geen SSPI-context genereren' die optreedt wanneer u verbinding probeert te maken met SQL Server met behulp van Windows-verificatie. Deze fout geeft meestal aan dat de SSPI (Security Support Provider Interface) kerberos-verificatie niet kan gebruiken om clientreferenties via TCP/IP of Named Pipes naar SQL Server te delegeren.

In dit artikel vindt u informatie over veelvoorkomende oorzaken van SSPI-contextfouten, SPN's (Service Principal Names) en hun rol in verificatie en hoe u de fout kunt diagnosticeren en oplossen.

Voordat u begint met het oplossen van problemen, raadpleegt u de vereisten en controlelijst voor het oplossen van verbindingsproblemen met SQL Server.

Symptomen

Wanneer u Windows-verificatie gebruikt om extern verbinding te maken met een SQL Server-exemplaar, wordt het volgende foutbericht weergegeven:

De naam van het doelaccount is onjuist. Kan geen SSPI-context genereren.

Oorzaak

Deze fout treedt meestal op wanneer Windows-verificatie het Kerberos-protocol niet gebruikt om clientreferenties te delegeren en niet kan terugvallen op NTLM-verificatie. In de meeste gevallen veroorzaakt een onjuist geconfigureerde SPN (Service Principal Name) deze fout.

Zie Veelgestelde vragen voor meer informatie over SSPI, Kerberos en SPN's.

De fout met Kerberos Configuration Manager oplossen

Notitie

Met deze aanpak wordt de fout opgelost wanneer u deze foutberichten consistent ontvangt, niet af en toe.

Kerberos-verbindingen mislukken om verschillende redenen, zoals onjuist geconfigureerde SPN's, problemen met naamomzetting of onvoldoende rechten voor opstartaccounts van de SQL Server-service. Microsoft Kerberos Configuration Manager (KCM) is een hulpprogramma waarmee u de oorzaken van de fout kunt controleren en opties biedt voor het oplossen van geïdentificeerde problemen.

Volg deze stappen om de fout op te lossen met behulp van KCM.

  1. Download en installeer Kerberos Configuration Manager op de computer waarop u de verbindingsproblemen ondervindt.

  2. Begin KerberosConfigMgr.exe vanuit de %SystemDrive%:\Program Files\Microsoft\Kerberos Configuration Manager map. Gebruik vervolgens een domeinaccount met machtigingen om verbinding te maken met de SQL Server-computer waarmee u geen verbinding kunt maken.

  3. Selecteer Verbinding maken en laat de servernaam en andere gegevens die van toepassing zijn op uw scenario leeg als u KCM uitvoert op de SQL Server-computer. Selecteer Verbinding maken om de analyse uit te voeren. Nadat KCM klaar is met het ophalen van de benodigde informatie, wordt automatisch overgeschakeld naar het tabblad SPN en wordt standaard informatie weergegeven voor SQL Server, SQL Server Reporting Services, Analysis Services en AG-listeners. Wis alle opties behalve SQL Server om deze fout op te lossen.

  4. Bekijk de diagnose van het hulpprogramma met behulp van de kolom Status en volg relevante stappen om het probleem op te lossen:

    Status Meer informatie Actie
    Goed Het ingeschakelde item is correct geconfigureerd. U kunt doorgaan naar het volgende item in de uitvoer. Geen actie nodig
    Vereiste SPN ontbreekt KCM rapporteert deze status wanneer de SPN die is geïdentificeerd in de kolom Vereiste SPN ontbreekt voor het SQL Server-opstartaccount in Active Directory. 1. Selecteer Herstellen om de informatie in het dialoogvenster Waarschuwing te bekijken.
    2. Selecteer Ja om de ontbrekende SPN toe te voegen aan Active Directory.
    3. Als uw domeinaccount over de benodigde machtigingen beschikt om Active Directory bij te werken, wordt de vereiste SPN toegevoegd aan Active Directory.
    4. Als uw domeinaccount niet over de benodigde machtigingen beschikt om Active Directory bij te werken, gebruikt u Genereren of Alles genereren om het script te genereren waarmee de Active Directory-beheerder de ontbrekende SPN's kan toevoegen.
    5. Nadat u de SPN's hebt toegevoegd, voert u Kerberos Configuration Manager opnieuw uit om te controleren of de SPN-problemen zijn opgelost.
    6. Daarnaast kunt u de volgende opdrachten gebruiken:
    - Gebruik SETSPN -Q spnName dit om de SPN en de huidige accounts te vinden.
    - Gebruik SETSPN -D deze optie om de SPN uit het onjuiste account te verwijderen.
    TCP moet zijn ingeschakeld voor het gebruik van Kerberos-configuratie Dit gebeurt wanneer TCP niet is ingeschakeld op de clientcomputer. Voer de volgende stappen uit om het TCP/IP-protocol in te schakelen voor het SQL Server-exemplaar:
    1. Vouw in SQL Server Configuration Manager in het console venster SQL Server Netwerkconfiguratie uit.
    2. Selecteer in het consoledeelvenster Protocollen voor <exemplaarnaam>.
    3. Klik met de rechtermuisknop in het venster details op TCP/IP en selecteer vervolgens Inschakelen.
    4. Selecteer SQL Server Services in het consolevenster.
    5. Klik in het detailvenster met de rechtermuisknop op SQL Server (exemplaarnaam<) en selecteer > om de SQL Server-service te stoppen en opnieuw te starten.
    Zie Een servernetwerkprotocol in- of uitschakelen voor meer informatie.
    Dynamische poort Dit bericht wordt weergegeven voor benoemde exemplaren die gebruikmaken van dynamische poorten (standaardconfiguratie). In omgevingen waarin u Kerberos moet gebruiken om verbinding te maken met SQL Server, stelt u uw benoemde exemplaar in op een statische poort en gebruikt u die poort bij het registreren van SPN. Voer de volgende stappen uit om uw SQL Server-exemplaar te configureren voor het gebruik van een statische poort:
    1. Vouw in SQL Server Configuration Manager in het consoledeelvensterSQL Server-netwerkconfiguratie uit, vouw protocollen voor <exemplaarnaam> uit en dubbelklik vervolgens op TCP/IP.
    2. Controleer in het dialoogvenster TCP/IP-eigenschappen de instelling Alles luisteren op het tabblad Protocol.
    3. Als de instelling Alles luisteren is ingesteld op Ja, gaat u naar het tabblad IP-adressen en scrollt u naar de onderkant van Windows om de instelling IPAll te vinden. Verwijder de huidige waarde die is opgenomen in de dynamische TCP-poorten en stel de gewenste waarde in het veld TCP-poort in. Selecteer OK en start het SQL Server-exemplaar opnieuw op om de instellingen van kracht te laten worden.
    4. Als de instelling Alles luisteren is ingesteld op Nee, gaat u naar het tabblad IP-adressen en controleert u elk van de IP-adressen die worden weergegeven in IP1, IP2. Voor ingeschakelde IP-adressen verwijdert u de huidige waarde in het veld Dynamische TCP-poorten en stelt u de gewenste waarde in het veld TCP-poort in. Selecteer OK en start het SQL Server-exemplaar opnieuw op om de instellingen van kracht te laten worden.
    Zie Een server configureren om te luisteren op een specifieke TCP-poort voor meer informatie.
    Dubbele SPN Deze situatie treedt op wanneer dezelfde SPN is geregistreerd onder verschillende accounts in Active Directory. 1. Selecteer de knop Herstellen, bekijk de informatie in het dialoogvenster Waarschuwing en selecteer Ja als u de ontbrekende SPN aan Active Directory kunt toevoegen.
    2. Als uw domeinaccount over de benodigde machtigingen beschikt om Active Directory bij te werken, wordt de onjuiste SPN verwijderd.
    3. Als uw domeinaccount niet over de benodigde machtigingen beschikt om Active Directory bij te werken, gebruikt u de knop Genereren of Alles genereren om het benodigde script te genereren dat u kunt overdragen aan uw Active Directory-beheerder om de dubbele SPN's te verwijderen. Zodra de SPN's zijn verwijderd, voert u de KCM opnieuw uit om te controleren of de SPN-problemen zijn opgelost.

    Notitie

    Als het domeinaccount waarmee KCM wordt gestart, geen bevoegdheden heeft voor het bewerken van SPN's in Active Directory, gebruikt u de bijbehorende knop Genereren of Alles genereren onder de kolom SPN-script om de vereiste opdrachten te genereren. Neem contact op met uw Active Directory-beheerder om de problemen op te lossen die KCM identificeert.

  5. Nadat alle problemen zijn opgelost die KCM identificeert, voert u het hulpprogramma opnieuw uit. Zorg ervoor dat er geen andere problemen worden gerapporteerd en probeer de verbinding vervolgens opnieuw. Als het hulpprogramma nog steeds problemen rapporteert, herhaalt u de vorige procedure.

De fout oplossen zonder Kerberos-Configuration Manager

Als u KCM niet kunt gebruiken, voert u de volgende stappen uit:

Naamresolutie controleren met de ping-opdracht

De belangrijkste factor die Kerberos-verificatie succesvol maakt, is de geldige DNS-functionaliteit op het netwerk. U kunt deze functionaliteit op de client en de server controleren met behulp van het Ping opdrachtprompthulpprogramma. Voer op de clientcomputer de volgende opdracht uit om het IP-adres op te halen van de server waarop SQL Server wordt uitgevoerd (waarbij de naam van de computer is SQLServer1):

ping sqlserver1

Voer de volgende opdracht uit om te zien of het hulpprogramma Ping de volledig gekwalificeerde DNS van SQLServer1 oplost:

ping -a <IPAddress>

Bijvoorbeeld:

C:\>ping SQLSERVER1

Pinging SQLSERVER1 [123.123.123.123] with 32 bytes of data:

Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128

Ping statistics for 123.123.123.123:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms 
C:\>ping -a 123.123.123.123

Pinging SQLSERVER1.northamerica.corp.mycompany.com [123.123.123.123] with 32 bytes of data:

Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Reply from 123.123.123.123: bytes=32 time<10ms TTL=128
Ping statistics for 123.123.123.123:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\> 

Wanneer de opdracht ping -a <IPAddress> wordt omgezet in de juiste volledig gekwalificeerde DNS van de computer waarop SQL Server wordt uitgevoerd, is de resolutie aan de clientzijde ook geslaagd.

Gebruik voor gedetailleerde diagnostische gegevens de cmdlet Test-NetConnection of Test-Connection om TCP-connectiviteit te testen op basis van de PowerShell-versie die op de computer is geïnstalleerd. Zie Cmdlet Overview (Overzicht van cmdlets) voor meer informatie over PowerShell-cmdlets.

Notitie

Methoden voor naamomzetting kunnen DNS-, WINS-, Hosts-bestanden en Lmhosts-bestanden bevatten. Voor meer informatie over problemen met naamresolutie en het oplossen daarvan, zie de volgende artikelen:

Controleer of er aliassen voor de doel-SQL Server bestaan in SQL Server Configuration Manager en in het hulpprogramma SQL Server Client Network. Als een dergelijke alias bestaat, controleert u of deze correct is geconfigureerd door de servernamen, het netwerkprotocol, het poortnummer, enzovoort te controleren. Een SQL Server-alias kan ertoe leiden dat er een onverwachte SPN wordt gegenereerd. Dit probleem resulteert in NTLM-referenties als de SPN niet wordt gevonden, of in een SSPI-fout als deze per ongeluk overeenkomt met de SPN van een andere server.

Communicatie tussen domeinen verifiëren

Controleer of het domein waarmee u zich aanmeldt kan communiceren met het domein van de server waarop SQL Server wordt uitgevoerd. Het domein moet ook de juiste naamresolutie hebben.

  1. Zorg ervoor dat u zich bij Windows kunt aanmelden met hetzelfde domeinaccount en hetzelfde wachtwoord als het opstartaccount van de SQL Server-service. De SSPI-fout kan bijvoorbeeld optreden in een van de volgende situaties:

    • Het domeinaccount is vergrendeld.
    • U hebt de SQL Server-service niet opnieuw opgestart na de wachtwoordwijziging.
  2. Als uw aanmeldingsdomein verschilt van het domein van de server waarop SQL Server wordt uitgevoerd, controleert u de vertrouwensrelatie tussen de domeinen.

  3. Controleer of het domein waartoe de server behoort en het domeinaccount dat u gebruikt om verbinding te maken zich in hetzelfde forest bevinden. Deze stap is vereist om SSPI te laten werken.

SQL Server SPN's verifiëren met behulp van SQLCHECK- en Setspn-hulpprogramma's

Als u zich lokaal kunt aanmelden bij de SQL Server-computer en beheerderstoegang hebt, gebruikt u SQLCHECK. SQLCheck biedt de meeste informatie die nodig is voor het oplossen van problemen in één bestand. Raadpleeg de startpagina van het hulpprogramma voor meer informatie over het gebruik van het hulpprogramma en de informatie die het verzamelt. U kunt ook de aanbevolen vereisten en controlelijstpagina controleren. Zodra u het uitvoerbestand heeft gegenereerd, controleert u de SPN-configuratie voor uw SQL Server-exemplaar in de sectie SQL Server-informatie van het uitvoerbestand.

Voorbeelduitvoer:

Suggested SPN                                               Exists  Status              

----------------------------------------------------------  ------  ------------------- 

MSSQLSvc/testsqlsvr.corp.com:2000                           True    Okay                

MSSQLSvc/testsqlsvr.corp.com                                True    Okay                

MSSQLSvc/testsqlsvr:2000                                    False   SPN does not exist. 

MSSQLSvc/testsqlsvr                                         False   SPN does not exist. 

Gebruik deze uitvoer om de volgende stappen te bepalen (zie de volgende voorbeelden) en gebruik het hulpprogramma Setspn om de benodigde herstelacties uit te voeren om SPN-problemen op te lossen.

Scenario Voorgestelde actie
SPN bestaat niet Voeg de vereiste SPN's toe voor uw SQL Server-serviceaccount.
Dubbele SPN's Verwijder de SPN die is geregistreerd voor uw SQL-service onder het onjuiste account.
SPN onder onjuist account Verwijder de geregistreerde SPN voor uw SQL-service onder het onjuiste account en registreer vervolgens de SPN onder het juiste serviceaccount.
Onjuiste SPN is geregistreerd Verwijder de onjuiste SPN en registreer de juiste SPN.

Notitie

  • U kunt de sectie SQL Server-informatie van het uitvoerbestand van het SQLCHECK-hulpprogramma bekijken om het serviceaccount van uw SQL Server-exemplaar te vinden.

  • Setspn is een geïntegreerd hulpprogramma in nieuwere versies van Windows waarmee u SPN's in Active Directory kunt lezen, toevoegen, wijzigen of verwijderen. U kunt dit hulpprogramma gebruiken om te controleren of SQL Server SPN's zijn geconfigureerd volgens de service-principalnaam registreren voor Kerberos-verbindingen. Zie Setspn-hulpprogramma en voorbeelden van hoe u dit kunt gebruiken voor meer informatie.

  • Zie Een service-principalnaam registreren voor Kerberos-verbindingen voor meer informatie over scenario's waarin SQL Server automatisch SPN's registreert en waar handmatige SPN-registratie is vereist.

Accountmachtiging controleren voor sql Server-opstartaccount op gekoppelde server

Als u imitatie gebruikt als verificatieoptie op de pagina Beveiliging van uw gekoppelde server, moet SQL Server binnenkomende referenties doorgeven aan de externe SQL Server. Het SQL Server-opstartaccount waarmee u de gekoppelde server definieert, moet in Active Directory het recht Account wordt vertrouwd voor delegatie toegewezen krijgen. Zie Computer- en gebruikersaccounts kunnen worden vertrouwd voor delegatie voor meer informatie.

Notitie

U hebt deze stap alleen nodig wanneer u problemen met betrekking tot gekoppelde serverquery's oplost.

Veelgestelde vragen

Wat is SSPI?

Security Support Provider Interface (SSPI) is een set Windows-API's waarmee delegatie en wederzijdse verificatie via een algemene gegevenstransportlaag, zoals TCP/IP-sockets, mogelijk is. Een of meer softwaremodules bieden de werkelijke verificatiemogelijkheden. Elke module wordt een SSP (Security Support Provider) genoemd en wordt geïmplementeerd als een DLL (Dynamic Link Library).

Wat is Kerberos?

Het Kerberos v5-protocol is een industriestandaard beveiligingspakket en is een van de drie beveiligingspakketten in Windows-besturingssystemen. Zie SSP's (Security Support Providers) voor meer informatie.

Wat betekent de fout 'Kan geen SSPI-context genereren'?

Deze fout betekent dat SSPI probeert, maar geen Kerberos-verificatie kan gebruiken om clientreferenties te delegeren via TCP/IP of Named Pipes voor SQL Server. In de meeste gevallen veroorzaakt een onjuist geconfigureerde SPN (Service Principal Name) deze fout.

Wat is SPN?

Een Service Principal Name (SPN) is een unieke id voor een service-exemplaar. Kerberos-verificatie maakt gebruik van SPN's om een service-exemplaar te koppelen aan een service-aanmeldingsaccount. Met dit koppelingsproces kan een clienttoepassing de service aanvragen om een account te verifiëren, zelfs als de client geen accountnaam heeft.

Een typische SPN voor een server waarop een exemplaar van SQL Server wordt uitgevoerd, is bijvoorbeeld als volgt:

MSSQLSvc/SQLSERVER1.northamerica.corp.mycompany.com:1433

De indeling van een SPN voor een standaardexemplaar is hetzelfde als een SPN voor een benoemd exemplaar. Het poortnummer verbindt de SPN met een bepaald exemplaar. Zie Een service-principalnaam registreren voor Kerberos-verbindingen voor meer informatie over het registreren van SQL Server service-SPN's.

Waarom gebruikt SSPI NTLM- of Kerberos-verificatie?

Windows-verificatie is de voorkeursmethode voor gebruikers om te verifiëren bij SQL Server. Clients die gebruikmaken van Windows-verificatie, worden geverifieerd met behulp van NTLM of Kerberos.

Wanneer een SQL Server-client gebruikmaakt van geïntegreerde beveiliging via TCP/IP-sockets naar een externe server waarop SQL Server wordt uitgevoerd, gebruikt de SQL Server clientnetwerkbibliotheek de SSPI-API om beveiligingsdelegering uit te voeren. De SQL Server netwerkclient roept de functie AcquireCredentialsHandle aan en geeft 'onderhandelen' door voor de pszPackage parameter. Dit proces waarschuwt de onderliggende beveiligingsprovider om te onderhandelen over delegatie. In deze context betekent 'onderhandelen' Kerberos- of NTLM-verificatie op Windows-computers. Met andere woorden, Windows gebruikt Kerberos-delegatie als de doelcomputer met SQL Server een gekoppelde en correct geconfigureerde SPN heeft. Anders gebruikt Windows NTLM-delegatie. Als de SQL Server-client lokaal verbinding maakt op dezelfde computer waar SQL Server zich bevindt, wordt altijd NTLM gebruikt.

Waarom wordt er geen failover uitgevoerd voor de verbinding met NTLM nadat er problemen zijn opgetreden met Kerberos?

Wanneer het stuurprogramma Windows-verificatie gebruikt om verbinding te maken met SQL Server, gebruikt de SQL Server-stuurprogrammacode op de client de WinSock-netwerk-API om de volledig gekwalificeerde DNS van de server op te lossen. Om deze bewerking uit te voeren, roept de stuurprogrammacode de gethostbyname en gethostbyaddr WinSock-API's aan. Als u geïntegreerde beveiliging gebruikt, probeert het stuurprogramma de volledig gekwalificeerde DNS van de server op te lossen, zelfs als u een IP-adres of hostnaam doorgeeft als de naam van de server.

Wanneer het SQL Server-stuurprogramma op de client de volledig gekwalificeerde DNS van de server oplost, wordt de bijbehorende DNS gebruikt om de SPN voor de server te vormen. Dus als WinSock het IP-adres of de hostnaam niet kan oplossen naar een volledig gekwalificeerde DNS, kan het SQL Server-stuurprogramma een ongeldige SPN voor de server maken.

Het SQL Server-stuurprogramma aan de clientzijde kan bijvoorbeeld een volledig gekwalificeerde DNS gebruiken om ongeldige SPN's als volgt op te lossen:

  • MSSQLSvc/SQLSERVER1:1433
  • MSSQLSvc/123.123.123.123:1433
  • MSSQLSvc/SQLSERVER1.antartica.corp.mycompany.com:1433
  • MSSQLSvc/SQLSERVER1.dns.northamerica.corp.mycompany.com:1433

Wanneer het SQL Server-stuurprogramma een ongeldige SPN vormt, werkt verificatie nog steeds omdat de SSPI-interface de SPN in de Active Directory-service probeert op te zoeken. Als de SSPI-interface de SPN niet vindt, wordt Kerberos-verificatie niet uitgevoerd. Op dat moment schakelt de SSPI-laag over naar de NTLM-verificatiemodus en de aanmelding maakt gebruik van NTLM-verificatie en slaagt dit meestal. Als het SQL Server-stuurprogramma een geldige SPN vormt die niet is toegewezen aan de juiste container, probeert het stuurprogramma de SPN, maar kan het niet gebruiken. In dit geval kan de fout 'Kan geen SSPI-context genereren' optreden. Als het SQL Server-opstartaccount een lokaal systeemaccount is, is de juiste container de computernaam. Voor elk ander account is de juiste container het SQL Server-opstartaccount. Verificatie maakt gebruik van de eerste SPN die wordt gevonden, dus zorg ervoor dat er geen SPN's zijn toegewezen aan onjuiste containers. Met andere woorden, elke SPN mag slechts aan één container worden toegewezen.

Hoe kan ik de verificatiemethode van de verbinding verifiëren?

Voer de volgende query uit om de verificatiemethode van een verbinding te bepalen:

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

Zie Hoe u kunt bepalen of het verificatietype Kerberos is.

Hoe maak ik SPN's voor SQL Server?

Wanneer een exemplaar van de SQL Server Database Engine wordt gestart, probeert SQL Server de SPN automatisch te registreren voor de SQL Server-service met behulp van de DsWriteAccountSpn-API . Deze aanroep slaagt als het SQL Server-serviceaccount lees-servicePrincipalName en schrijfservicePrincipalNamerechten heeft in Active Directory. Anders moet uw Active Directory-beheerder de juiste SPN handmatig registreren met behulp van Microsoft Kerberos Manager voor SQL Server of het ingebouwde hulpprogramma Setspn . Zie Een Service-principalnaam registreren voor Kerberos-verbindingen voor meer informatie over het beheren van SPN's voor SQL Server.