Dela via


Stöd för tjänstens huvudnamn (SPN) i klientanslutningar i den interna SQL Server-klienten

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Viktig

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande faktorer för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server Database Engine (version 2012 till och med 2019), se det här Support Lifecycle exception.

Från och med SQL Server 2008 (10.0.x) har stödet för tjänstens huvudnamn (SPN) utökats för att möjliggöra ömsesidig autentisering i alla protokoll. I tidigare versioner av SQL Server stöddes SPN endast för Kerberos via TCP när standard-SPN för SQL Server-instansen registrerades med Active Directory.

SPN används av autentiseringsprotokollet för att fastställa det konto där en SQL Server-instans körs. Om instanskontot är känt kan Kerberos-autentisering användas för att tillhandahålla ömsesidig autentisering av klienten och servern. Om instanskontot inte är känt används NTLM-autentisering, som endast tillhandahåller autentisering av klienten av servern. För närvarande utför SQL Server Native Client autentiseringssökningen, vilket härleder SPN från instansnamnet och nätverksanslutningsegenskaperna. SQL Server-instanser försöker registrera SPN vid start, eller så kan de registreras manuellt. Registreringen misslyckas dock om det inte finns tillräckliga åtkomsträttigheter för kontot som försöker registrera SPN:erna.

Domän- och datorkonton registreras automatiskt i Active Directory. Dessa kan användas som SPN eller så kan administratörer definiera sina egna SPN. SQL Server gör säker autentisering mer hanterbar och tillförlitlig genom att tillåta klienter att direkt ange vilket SPN som ska användas.

Not

Ett SPN som anges av ett klientprogram används endast när en anslutning görs med Windows-integrerad säkerhet.

Dricks

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.

Mer information om Kerberos finns i följande artiklar:

Användning

I följande tabell beskrivs de vanligaste scenarierna där klientprogram kan aktivera säker autentisering.

Scenario Beskrivning
Ett äldre program anger inte något SPN. Det här kompatibilitetsscenariot garanterar att det inte sker någon beteendeförändring för program som utvecklats för tidigare versioner av SQL Server. Om inget SPN anges förlitar sig programmet på genererade SPN och har ingen kunskap om vilken autentiseringsmetod som används.
Ett klientprogram som använder den aktuella versionen av SQL Server Native Client anger ett SPN i anslutningssträngen som domänanvändare eller datorkonto, som ett instansspecifikt SPN eller som en användardefinierad sträng. Nyckelordet ServerSPN kan användas i en provider, initiering eller anslutningssträng för att göra följande:

-Ange det konto som används av SQL Server-instansen för en anslutning. Detta förenklar åtkomsten till Kerberos-autentisering. Om det finns ett Kerberos Key Distribution Center (KDC) och rätt konto har angetts är Kerberos-autentisering mer sannolikt att användas än NTLM. KDC finns vanligtvis på samma dator som domänkontrollanten.

-Ange ett SPN för att söka efter tjänstkontot för SQL Server-instansen. För varje SQL Server-instans genereras två standard-SPN:er som kan användas för detta ändamål. Dessa nycklar är dock inte garanterade att finnas i Active Directory, så i den här situationen garanteras inte Kerberos-autentisering.

-Ange ett SPN som ska användas för att leta upp tjänstkontot för SQL Server-instansen. Det kan vara valfri användardefinierad sträng som mappar till tjänstkontot. I det här fallet måste nyckeln registreras manuellt i KDC och uppfylla reglerna för ett användardefinierat SPN.

Nyckelordet FailoverPartnerSPN kan användas för att ange SPN för redundanspartnerservern. Intervallet för konto- och Active Directory-nyckelvärden är samma som de värden som du kan ange för huvudservern.
Ett ODBC-program anger ett SPN som ett anslutningsattribut för huvudservern eller redundanspartnerservern. Anslutningsattributet SQL_COPT_SS_SERVER_SPN kan användas för att ange SPN för en anslutning till huvudservern.

Anslutningsattributet SQL_COPT_SS_FAILOVER_PARTNER_SPN kan användas för att ange SPN för redundanspartnerservern.
Ett OLE DB-program anger ett SPN som en initieringsegenskap för datakällan för huvudservern eller för en redundanspartnerserver. Anslutningsegenskapen SSPROP_INIT_SERVER_SPN i egenskapsuppsättningen DBPROPSET_SQLSERVERDBINIT kan användas för att ange SPN för en anslutning.

Anslutningsegenskapen SSPROP_INIT_FAILOVER_PARTNER_SPN i DBPROPSET_SQLSERVERDBINIT kan användas för att ange SPN för redundanspartnerservern.
En användare anger ett SPN för en server eller redundanspartnerserver i ett ODBC-datakällnamn (DSN). SPN kan anges i en ODBC DSN via DSN-konfigurationsdialogrutorna.
Användaren anger ett SPN för en server eller redundanspartnerserver i en OLE DB-Data Link- eller dialogrutan Inloggning. SPN kan anges i dialogrutan Data Link eller Inloggning. Dialogrutan Inloggning kan användas med antingen ODBC eller OLE DB.
Ett ODBC-program avgör vilken autentiseringsmetod som används för att upprätta en anslutning. När en anslutning har öppnats kan ett program fråga anslutningsattributet SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD för att avgöra vilken autentiseringsmetod som användes. Värdena inkluderar, men är inte begränsade till, NTLM- och Kerberos.
Ett OLE DB-program avgör vilken autentiseringsmetod som används för att upprätta en anslutning. När en anslutning har öppnats kan ett program fråga anslutningsegenskapen SSPROP_AUTHENTICATION_METHOD i egenskapsuppsättningen DBPROPSET_SQLSERVERDATASOURCEINFO för att avgöra vilken autentiseringsmetod som användes. Värdena inkluderar, men är inte begränsade till, NTLM- och Kerberos.

Redundans

SPN lagras inte i redundanscachen och kan därför inte skickas mellan anslutningar. SPN används för alla anslutningsförsök till huvudkontot och partnern när de anges i anslutningssträngen eller anslutningsattributen.

Anslutningspooler

Program bör vara medvetna om att ange SPN i vissa men inte alla anslutningssträngar kan bidra till poolfragmentering.

Program kan programmatiskt ange SPN som anslutningsattribut, i stället för att ange nyckelord för anslutningssträngar. Detta kan hjälpa dig att hantera fragmentering av anslutningspooler.

Program bör vara medvetna om att SPN:er i anslutningssträngar kan åsidosättas genom att ange motsvarande anslutningsattribut, men anslutningssträngar som används av anslutningspooler använder anslutningssträngvärdena i poolsyfte.

Down-Level serverbeteende

Det nya anslutningsbeteendet implementeras av klienten. Därför är den inte specifik för en version av SQL Server.

Länkade servrar och delegering

När länkade servrar skapas kan parametern @provstr för sp_addlinkedserver användas för att ange server- och redundanspartner-SPN:er. Fördelarna med att göra detta är samma som att ange SPN i klientanslutningssträngar: Det är enklare och mer tillförlitligt att upprätta anslutningar som använder Kerberos-autentisering.

Delegering med länkade servrar kräver Kerberos-autentisering.

Hanteringsaspekter av SPN som anges av program

När du väljer om du vill ange SPN i ett program (via anslutningssträngar) eller programmatiskt via anslutningsegenskaper (i stället för att förlita sig på standardproviderns genererade SPN) bör du tänka på följande faktorer:

  • Säkerhet: Lämnar det angivna SPN ut information som är skyddad?

  • Tillförlitlighet: För att aktivera användning av standard-SPN måste tjänstkontot där SQL Server-instansen körs ha tillräcklig behörighet för att uppdatera Active Directory på KDC.

  • Bekvämlighet och platstransparens: Hur påverkas ett programs SPN om databasen flyttas till en annan SQL Server-instans? Detta gäller både huvudservern och dess redundanspartner om du använder databasspegling. Hur påverkar detta program om en serverändring innebär att SPN måste ändras? Kommer några ändringar att hanteras?

Ange SPN

Du kan ange ett SPN i dialogrutor och i kod. I det här avsnittet beskrivs hur du kan ange ett SPN.

Den maximala längden för ett SPN är 260 tecken.

Syntaxen som SPN använder i anslutningssträngar eller anslutningsattribut är följande:

Syntax Beskrivning
MSSQLSvc/fqdn Det providergenererade standard-SPN för en standardinstans när ett annat protokoll än TCP används.

fqdn är ett fullständigt domännamn.
MSSQLSvc/fqdn:port Det providergenererade standard-SPN när TCP används.

port är ett TCP-portnummer.
MSSQLSvc/fqdn:InstanceName Det providergenererade standard-SPN för en namngiven instans när ett annat protokoll än TCP används.

InstanceName är ett SQL Server-instansnamn.
HOST/fqdn

HOST/MachineName
DET SPN som mappar till inbyggda datorkonton som registreras automatiskt av Windows.
Användarnamn@Domän Direktspecifikation för ett domänkonto.

Användarnamn är ett Windows-användarkontonamn.

Domain är ett Windows-domännamn eller ett fullständigt domännamn.
MachineName$@Domain Direktspecifikation för ett datorkonto.

(Om servern som du ansluter till körs under LOKALA SYSTEM- eller NETWORK SERVICE-konton kan ServerSPN- finnas i formatet MachineName$@Domain.)
KDCKey/MachineName Ett användardefingivet SPN.

KDCKey är en alfanumerisk sträng som överensstämmer med reglerna för en KDC-nyckel.

ODBC- och OLE DB-syntaxstödande SPN:er

Syntaxspecifik information finns i följande avsnitt:

Se även

inbyggda klientfunktioner i SQL Server
registrera ett tjänsthuvudnamn för Kerberos-anslutningar