Delen via


Een service-principalnaam registreren voor Kerberos-verbindingen

van toepassing op:SQL Server-

Als u Kerberos-verificatie wilt gebruiken met SQL Server, moeten beide van de volgende voorwaarden waar zijn:

  • De client- en servercomputers moeten deel uitmaken van hetzelfde Windows-domein of in vertrouwde domeinen.

  • Een SPN (Service Principal Name) moet worden geregistreerd bij Active Directory, waarbij wordt uitgegaan van de rol van het sleuteldistributiecentrum in een Windows-domein. De SPN wordt, nadat deze is geregistreerd, toegewezen aan het Windows-account dat de SQL Server-exemplaarservice heeft gestart. Als de SPN-registratie niet is uitgevoerd of mislukt, kan de Windows-beveiligingslaag niet bepalen welk account is gekoppeld aan de SPN en wordt Kerberos-verificatie niet gebruikt.

    Notitie

    Als de server de SPN niet automatisch kan registreren, moet de SPN handmatig worden geregistreerd. Zie handmatige SPN-registratie.

U kunt controleren of een verbinding gebruikmaakt van Kerberos door een query uit te voeren op de sys.dm_exec_connections dynamische beheerweergave. Voer de volgende query uit en controleer de waarde van de kolom auth_scheme. Dit is KERBEROS als Kerberos is ingeschakeld.

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

Tip

Microsoft Kerberos Configuration Manager voor SQL Server is een diagnostisch hulpprogramma dat helpt bij het oplossen van kerberos-gerelateerde verbindingsproblemen met SQL Server. Zie Microsoft Kerberos Configuration Manager voor SQL Servervoor meer informatie.

De rol van de SPN in authenticatie

Wanneer een toepassing een verbinding opent en Windows-verificatie gebruikt, geeft SQL Server Native Client de SQL Server-computernaam, instantienaam en, optioneel, een SPN door. Als de verbinding een SPN doorgeeft, wordt deze zonder wijzigingen gebruikt.

Als de verbinding geen SPN doorgeeft, wordt er een standaard-SPN samengesteld op basis van het protocol dat wordt gebruikt, de servernaam en de naam van het exemplaar.

In beide voorgaande scenario's wordt de SPN verzonden naar het Sleuteldistributiecentrum om een beveiligingstoken te verkrijgen voor het verifiëren van de verbinding. Als er geen beveiligingstoken kan worden verkregen, gebruikt verificatie NTLM.

Een SPN is de naam waarmee een client een exemplaar van een service uniek identificeert. De Kerberos-verificatieservice kan een SPN gebruiken om een service te verifiëren. Wanneer een client verbinding wil maken met een service, lokaliseert het een exemplaar van de service, stelt een SPN samen voor dat exemplaar, maakt verbinding met de service en presenteert de SPN om de service te authenticeren.

Notitie

De informatie in dit artikel is ook van toepassing op SQL Server-configuraties die gebruikmaken van clustering.

Windows-verificatie is de voorkeursmethode voor gebruikers om te verifiëren bij SQL Server. Clients die gebruikmaken van Windows-verificatie worden geverifieerd door NTLM of Kerberos. In een Active Directory-omgeving wordt kerberos-verificatie altijd eerst geprobeerd.

Machtigingen

Wanneer de Database Engine-service wordt gestart, wordt geprobeerd de Service Principal Name (SPN) te registreren. Stel dat het account dat sql Server start, geen machtiging heeft om een SPN te registreren in Active Directory Domain Services. In dat geval mislukt deze aanroep en wordt er een waarschuwingsbericht vastgelegd in zowel het gebeurtenislogboek van de toepassing als het SQL Server-foutenlogboek.

Als u de SPN wilt registreren, moet de database-engine worden uitgevoerd onder een ingebouwd account, zoals Local System (niet aanbevolen) of NETWORK SERVICE, of een account dat gemachtigd is om een SPN te registreren. U kunt een SPN registreren met een domeinbeheerdersaccount, maar dit wordt niet aanbevolen in een productieomgeving. U kunt SQL Server uitvoeren met behulp van een virtueel account of een beheerd serviceaccount (MSA). Zowel virtuele accounts als MSA's kunnen een SPN registreren. Als SQL Server niet wordt uitgevoerd onder een van deze accounts, wordt de SPN niet geregistreerd bij het opstarten en moet de domeinbeheerder de SPN handmatig registreren.

SPN-indelingen

De SPN-indeling ondersteunt Kerberos-verificatie op TCP/IP, benoemde pijpen en gedeeld geheugen. De ondersteunde SPN-indelingen voor benoemde en standaardexemplaren zijn als volgt.

Benoemd exemplaar

  • MSSQLSvc/<FQDN>:[<poort> | <exemplaarnaam>], waar:

    • MSSQLSvc is de service die wordt geregistreerd.
    • <FQDN> is de volledig gekwalificeerde domeinnaam van de server.
    • <port> is het TCP-poortnummer.
    • <instancename> is de naam van het SQL Server-exemplaar.

Standaardinstantie

  • MSSQLSvc/<FQDN->:<poort> | MSSQLSvc/<FQDN->, waarbij:

    • MSSQLSvc is de service die wordt geregistreerd.
    • <FQDN> is de volledig gekwalificeerde domeinnaam van de server.
    • <port> is het TCP-poortnummer.
SPN-indeling Beschrijving
MSSQLSvc/<FQDN>:<port> 1 De door de provider gegenereerde standaard-SPN wanneer TCP wordt gebruikt. <port> is een TCP-poortnummer.
MSSQLSvc/<FQDN> De door de provider gegenereerde SPN-standaard voor een standaardexemplaar wanneer een ander protocol dan TCP wordt gebruikt. <FQDN> is een volledig gekwalificeerde domeinnaam.
MSSQLSvc/<FQDN>:<instancename> De door de provider gegenereerde, standaard SPN voor een benoemd exemplaar wanneer een ander protocol dan TCP wordt gebruikt. <instancename> is de naam van een exemplaar van SQL Server.

1 De SPN-indeling vereist geen poortnummer. Een server met meerdere poorten of een protocol dat geen poortnummers gebruikt, kan nog steeds Kerberos-verificatie gebruiken.

Voor een TCP/IP-verbinding, waarbij de TCP-poort is opgenomen in de SPN, moet SQL Server het TCP-protocol inschakelen zodat een gebruiker verbinding kan maken met behulp van Kerberos-verificatie.

Automatische SPN-registratie

Wanneer een exemplaar van de SQL Server Database Engine wordt gestart, probeert SQL Server de SPN te registreren voor de SQL Server-service. Wanneer het exemplaar is gestopt, probeert SQL Server de registratie van de SPN ongedaan te maken. Voor een TCP/IP-verbinding wordt de SPN geregistreerd in de indeling MSSQLSvc/<FQDN>:<tcpport>. Zowel benoemde exemplaren als het standaardexemplaren worden geregistreerd als MSSQLSvc, afhankelijk van de <tcpport> waarde om onderscheid te maken tussen de exemplaren.

Voor andere verbindingen die Kerberos ondersteunen, wordt de SPN geregistreerd in de indeling MSSQLSvc/<FQDN>:<instancename> voor een benoemd exemplaar. De indeling voor het registreren van het standaardexemplaar is MSSQLSvc/<FQDN>.

Voer de volgende stappen uit om machtigingen te verlenen aan het SQL Server-opstartaccount om de SPN te registreren en te wijzigen:

  1. Navigeer op de domeincontroller naar Active Directory-gebruikers en -computers.

  2. Selecteer Weergave > Geavanceerd.

  3. Zoek onder Computersde SQL Server-computer en klik met de rechtermuisknop en selecteer eigenschappen.

  4. Selecteer het tabblad Security en selecteer Advanced.

  5. Als het opstartaccount van SQL Server niet wordt weergegeven, selecteert u toevoegen om het toe te voegen. Nadat deze is toegevoegd, voert u de volgende stappen uit:

    1. Selecteer het account en bewerk .

    2. Selecteer onder Machtigingen Gevalideerd schrijven van servicePrincipalName.

    3. Schuif omlaag en selecteer onder Eigenschappen:

      • ServicePrincipalName lezen
      • Schrijf servicePrincipalName
    4. Selecteer OK twee keer.

  6. Sluit Active Directory Gebruikers en Computers.

Handmatige tussenkomst kan vereist zijn om de SPN te registreren of de registratie ervan ongedaan te maken als het serviceaccount niet beschikt over de machtigingen die vereist zijn voor deze acties.

Handmatige SPN-registratie

Als u de SPN handmatig wilt registreren, kunt u het hulpprogramma setspn dat is ingebouwd in Windows gebruiken. setspn.exe is een opdrachtregelprogramma waarmee u de mapeigenschap Service Principal Names (SPN) kunt lezen, wijzigen en verwijderen. Met dit hulpprogramma kunt u ook de huidige SPN's weergeven, de standaard-SPN's van het account opnieuw instellen en aanvullende SPN's toevoegen of verwijderen.

Voor meer informatie over het hulpprogramma setspn, de vereiste machtigingen en voorbeelden van hoe deze te gebruiken, raadpleeg setspn.

In het volgende voorbeeld ziet u de syntaxis die wordt gebruikt voor het handmatig registreren van een SPN voor een TCP/IP-verbinding met behulp van een domeingebruikersaccount:

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

Notitie

Als er al een SPN bestaat, moet deze worden verwijderd voordat deze opnieuw kan worden geregistreerd. U doet dit met behulp van setspn- met de -D schakelaar. In de volgende voorbeelden ziet u hoe u handmatig een nieuwe instantie-gebaseerde SPN registreert. Voor een standaardexemplaar met een domeingebruikersaccount, gebruik:

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

Voor een benoemd exemplaar gebruikt u:

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

Zie Listeners and Kerberos (SPN's)voor meer informatie over configuraties van AlwaysOn-beschikbaarheidsgroepen.

Clientverbindingen

Door de gebruiker opgegeven SPN's worden ondersteund in clientstuurprogramma's. Als er echter geen SPN wordt opgegeven, wordt deze automatisch gegenereerd op basis van het type clientverbinding. Voor een TCP-verbinding wordt een SPN in de indeling MSSQLSvc/FQDN:[<port>] gebruikt voor zowel benoemde als standaardexemplaren.

Voor benoemde pijpen en gedeelde geheugenverbindingen wordt een SPN in het formaat MSSQLSvc/<FQDN>:<instancename> gebruikt voor een benoemd exemplaar en MSSQLSvc/<FQDN> voor het standaardexemplaar.

Een serviceaccount gebruiken als een SPN

Serviceaccounts kunnen als SPN worden gebruikt. Ze worden opgegeven via het verbindingskenmerk voor de Kerberos-authenticatie en nemen de volgende indelingen:

  • username\@domain of domain\username voor een domeingebruikersaccount

  • machine$\@domain of host\FQDN voor een computerdomeinaccount, zoals Local System of NETWORK SERVICE.

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;

Standaardinstellingen voor verificatie

In de volgende tabel worden de standaardinstellingen voor verificatie beschreven die worden gebruikt op basis van SPN-registratiescenario's.

Scenario Verificatiemethode
De SPN wordt toegewezen aan het juiste domeinaccount, een virtueel account, een MSA of een ingebouwd account. Bijvoorbeeld Local System of NETWORK SERVICE. Lokale verbindingen maken gebruik van NTLM, externe verbindingen maken gebruik van Kerberos.
De SPN is het juiste domeinaccount, virtueel account, MSA of ingebouwd account. Lokale verbindingen maken gebruik van NTLM, externe verbindingen maken gebruik van Kerberos.
De SPN wordt toegewezen aan een onjuist domeinaccount, virtueel account, MSA of ingebouwd account Verificatie mislukt.
De SPN-zoekopdracht mislukt of wordt niet toegewezen aan een correct domeinaccount, virtueel account, MSA of ingebouwd account, of is geen correct domeinaccount, virtueel account, MSA of ingebouwd account. Lokale en externe verbindingen maken gebruik van NTLM.

Notitie

Juiste betekent dat het account dat is toegewezen door de geregistreerde SPN het account is waaronder de SQL Server-service wordt uitgevoerd.

Opmerkingen

De DAC (Dedicated Administrator Connection) maakt gebruik van een SPN op basis van een exemplaarnaam. Kerberos-verificatie kan worden gebruikt met een DAC als die SPN op succesvolle wijze is geregistreerd. Als alternatief kan een gebruiker de accountnaam opgeven als een SPN.

Als de SPN-registratie mislukt tijdens het opstarten, wordt deze fout vastgelegd in het foutenlogboek van SQL Server en wordt het opstarten voortgezet.

Als spn-deregistratie mislukt tijdens het afsluiten, wordt deze fout vastgelegd in het SQL Server-foutenlogboek en wordt het afsluiten voortgezet.