Registrera ett tjänsthuvudnamn för Kerberos-anslutningar
gäller för:SQL Server
Om du vill använda Kerberos-autentisering med SQL Server måste båda följande villkor vara uppfyllda:
Klient- och serverdatorerna måste ingå i samma Windows-domän eller i betrodda domäner.
Ett SPN (Service Principal Name) måste registreras med Active Directory, som förutsätter rollen som Nyckeldistributionscenter i en Windows-domän. Efter att det har registrerats mappas SPN till det Windows-konto som startade SQL Server-tjänsten. Om SPN-registreringen inte har utförts eller misslyckas kan Windows säkerhetslager inte fastställa vilket konto som är associerat med SPN och Kerberos-autentisering används inte.
Notera
Om servern inte kan registrera SPN automatiskt måste SPN registreras manuellt. Se manuell SPN-registrering.
Du kan kontrollera att en anslutning använder Kerberos genom att fråga den dynamiska hanteringsvyn sys.dm_exec_connections
. Kör följande fråga och kontrollera värdet för kolumnen auth_scheme
, vilket är KERBEROS
om Kerberos är aktiverat.
SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Tips
Microsoft Kerberos Configuration Manager för SQL Server är ett diagnostikverktyg som hjälper dig att felsöka Kerberos-relaterade anslutningsproblem med SQL Server. Mer information finns i Microsoft Kerberos Configuration Manager för SQL Server.
SPN:s roll i autentisering
När ett program öppnar en anslutning och använder Windows-autentisering skickar SQL Server Native Client SQL Server-datornamnet, instansnamnet och, om du vill, ett SPN. Om anslutningen skickar ett SPN används det utan ändringar.
Om anslutningen inte skickar ett SPN skapas ett standard-SPN baserat på det protokoll som används, servernamnet och instansnamnet.
I båda föregående scenarier skickas SPN till Key Distribution Center för att hämta en säkerhetstoken för att autentisera anslutningen. Om det inte går att hämta en säkerhetstoken använder autentiseringen NTLM.
Ett SPN är det namn som en klient unikt identifierar en instans av en tjänst med. Kerberos-autentiseringstjänsten kan använda ett SPN för att autentisera en tjänst. När en klient vill ansluta till en tjänst letar den upp en instans av tjänsten, skapar ett SPN för den instansen, ansluter till tjänsten och presenterar SPN för tjänsten att autentisera.
Not
Informationen i den här artikeln gäller även för SQL Server-konfigurationer som använder klustring.
Windows-autentisering är den bästa metoden för användare att autentisera till SQL Server. Klienter som använder Windows-autentisering autentiseras av antingen NTLM eller Kerberos. I en Active Directory-miljö görs alltid Kerberos-autentisering först.
Behörigheter
När databasmotortjänsten startar försöker den registrera tjänstens huvudnamn (SPN). Anta att kontot som startar SQL Server inte har behörighet att registrera ett SPN i Active Directory Domain Services. I så fall misslyckas det här anropet och ett varningsmeddelande loggas i både programhändelseloggen och SQL Server-felloggen.
För att registrera SPN måste databasmotorn köras under ett inbyggt konto, till exempel Local System
(rekommenderas inte) eller NETWORK SERVICE
eller ett konto som har behörighet att registrera ett SPN. Du kan registrera ett SPN med ett domänadministratörskonto, men det rekommenderas inte i en produktionsmiljö. Du kan köra SQL Server med ett virtuellt konto eller ett hanterat tjänstkonto (MSA). Både virtuella konton och MSA:er kan registrera ett SPN. Om SQL Server inte körs under något av dessa konton registreras inte SPN vid start och domänadministratören måste registrera SPN manuellt.
SPN-format
SPN-formatet stöder Kerberos-autentisering på TCP/IP, namngivna pipes och delat minne. De SPN-format som stöds för namngivna och standardinstanser är följande.
Namngiven instans
MSSQLSvc/<FQDN>:[<port> | <instansnamn>], där:
-
MSSQLSvc
är den tjänst som registreras. -
<FQDN>
är serverns fullständigt kvalificerade domännamn. -
<port>
är TCP-portnumret. -
<instancename>
är namnet på SQL Server-instansen.
-
Standardinstans
MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, där:
-
MSSQLSvc
är den tjänst som registreras. -
<FQDN>
är serverns fullständigt kvalificerade domännamn. -
<port>
är TCP-portnumret.
-
SPN-format | Beskrivning |
---|---|
MSSQLSvc/<FQDN>:<port>
1 |
Det providergenererade standard-SPN när TCP används.
<port> är ett TCP-portnummer. |
MSSQLSvc/<FQDN> |
Det providergenererade standard-SPN för en standardinstans när ett annat protokoll än TCP används.
<FQDN> är ett fullständigt kvalificerat domännamn. |
MSSQLSvc/<FQDN>:<instancename> |
Det providergenererade standard-SPN för en namngiven instans när ett annat protokoll än TCP används.
<instancename> är namnet på en instans av SQL Server. |
1 SPN-formatet kräver inget portnummer. En server med flera portar, eller ett protokoll som inte använder portnummer, kan fortfarande använda Kerberos-autentisering.
För en TCP/IP-anslutning, där TCP-porten ingår i SPN, måste SQL Server aktivera TCP-protokollet för att en användare ska kunna ansluta med hjälp av Kerberos-autentisering.
Automatisk SPN-registrering
När en instans av SQL Server Database Engine startar försöker SQL Server registrera SPN för SQL Server-tjänsten. När instansen stoppas försöker SQL Server avregistrera SPN. För en TCP/IP-anslutning registreras SPN i formatet MSSQLSvc/<FQDN>:<tcpport>
. Både namngivna instanser och standardinstansen registreras som MSSQLSvc
och förlitar sig på värdet <tcpport>
för att särskilja instanserna.
För andra anslutningar som stöder Kerberos registreras SPN i formatet MSSQLSvc/<FQDN>:<instancename>
för en namngiven instans. Formatet för att registrera standardinstansen är MSSQLSvc/<FQDN>
.
Utför följande steg för att ge behörighet till SQL Server-startkontot för att registrera och ändra SPN:
På domänkontrollantdatorn navigerar du till Active Directory-användare och -datorer.
Välj Visa > Avancerat.
Under Datorerletar du upp SQL Server-datorn och högerklickar och väljer Egenskaper.
Välj fliken Säkerhet och välj Avancerat.
Om SQL Server-startkontot inte visas i listan väljer du Lägg till för att lägga till det. När den har lagts till utför du följande steg:
Välj kontot och välj Redigera.
Under Behörigheter väljer du verifierad skriv servicePrincipalName.
Rulla nedåt och under Egenskaper välja:
- Läsa servicePrincipalName
- Skriv servicePrincipalName
Välj OK två gånger.
Stäng Active Directory-användare och -datorer.
Manuella åtgärder kan krävas för att registrera eller avregistrera SPN om tjänstkontot saknar de behörigheter som krävs för dessa åtgärder.
Manuell SPN-registrering
Om du vill registrera SPN manuellt kan du använda verktyget setspn som är inbyggt i Windows.
setspn.exe
är ett kommandoradsverktyg som gör att du kan läsa, ändra och ta bort katalogegenskapen SPN (Service Principal Names). Med det här verktyget kan du också visa de aktuella SPN:erna, återställa kontots standard-SPN och lägga till eller ta bort tilläggs-SPN.
Mer information om verktyget setspn, nödvändiga behörigheter och exempel på hur du använder det finns i setspn.
I följande exempel visas syntaxen som används för att manuellt registrera ett SPN för en TCP/IP-anslutning med ett domänanvändarkonto:
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname
Notera
Om det redan finns ett SPN måste det tas bort innan det kan registreras igen. Du gör detta genom att använda kommandot setspn med växeln -D
. Följande exempel visar hur du manuellt registrerar ett nytt instansbaserat SPN. För en standardinstans med ett domänanvändarkonto använder du:
setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname
För en namngiven instans använder du:
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname
Mer information om konfigurationer av AlwaysOn-tillgänglighetsgrupper finns i lyssnare och Kerberos(SPN).
Klientanslutningar
Användardefinierade SPN stöds i klientdrivrutiner. Men om ett SPN inte tillhandahålls genereras det automatiskt baserat på typen av klientanslutning. För en TCP-anslutning används ett SPN i formatet MSSQLSvc/FQDN:[<port>]
för både namngivna instanser och standardinstanser.
För namngivna pipes och delade minnesanslutningar används ett SPN i formatet MSSQLSvc/<FQDN>:<instancename>
för en namngiven instans och MSSQLSvc/<FQDN>
används för standardinstansen.
Använda ett tjänstkonto som ett SPN
Tjänstkonton kan användas som ett SPN. De anges via anslutningsattributet för Kerberos-autentiseringen och har följande format:
username\@domain
ellerdomain\username
för ett domänanvändarkontomachine$\@domain
ellerhost\FQDN
för ett datordomänkonto, till exempelLocal System
ellerNETWORK SERVICE
.
Kör följande fråga för att fastställa autentiseringsmetoden för en anslutning.
SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
Standardinställningar för autentisering
I följande tabell beskrivs standardinställningarna för autentisering som används, baserat på SPN-registreringsscenarier.
Scenario | Autentiseringsmetod |
---|---|
SPN mappar till rätt domänkonto, virtuellt konto, MSA eller inbyggt konto. Till exempel Local System eller NETWORK SERVICE . |
Lokala anslutningar använder NTLM, fjärranslutningar använder Kerberos. |
SPN är rätt domänkonto, virtuellt konto, MSA eller inbyggt konto. | Lokala anslutningar använder NTLM, fjärranslutningar använder Kerberos. |
SPN mappar till ett felaktigt domänkonto, virtuellt konto, MSA eller inbyggt konto | Autentiseringen misslyckas. |
SPN-sökningen misslyckas eller mappas inte till ett korrekt domänkonto, virtuellt konto, MSA eller inbyggt konto, eller är inte ett korrekt domänkonto, virtuellt konto, MSA eller inbyggt konto. | Lokala anslutningar och fjärranslutningar använder NTLM. |
Not
Korrekt innebär att kontot som mappas av det registrerade SPN:et är det konto som SQL Server-tjänsten körs under.
Anmärkningar
Den dedikerade administratörsanslutningen (DAC) använder ett instansnamnbaserat SPN. Kerberos-autentisering kan användas med en DAC om den SPN har registrerats framgångsrikt. Alternativt kan en användare ange kontonamnet som ett SPN.
Om SPN-registreringen misslyckas under starten registreras det här felet i SQL Server-felloggen och starten fortsätter.
Om SPN-avregistreringen misslyckas under avstängningen registreras det här felet i SQL Server-felloggen och avstängningen fortsätter.