Delen via


SpN-ondersteuning (Service Principal Name) in clientverbindingen in SQL Server Native Client

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Belangrijk

SQL Server Native Client (SNAC) wordt niet geleverd met:

  • SQL Server 2022 (16.x) en latere versies
  • SQL Server Management Studio 19 en latere versies

De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.

Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:

Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.

Vanaf SQL Server 2008 (10.0.x) is ondersteuning voor service-principalnamen (SPN's) uitgebreid om wederzijdse verificatie in alle protocollen mogelijk te maken. In eerdere versies van SQL Server werden SPN's alleen ondersteund voor Kerberos via TCP wanneer de standaard-SPN voor het SQL Server-exemplaar is geregistreerd bij Active Directory.

SPN's worden door het verificatieprotocol gebruikt om het account te bepalen waarin een SQL Server-exemplaar wordt uitgevoerd. Als het exemplaaraccount bekend is, kan Kerberos-verificatie worden gebruikt om wederzijdse verificatie door de client en server te bieden. Als het exemplaaraccount niet bekend is, wordt NTLM-verificatie, die alleen verificatie van de client door de server biedt, gebruikt. Momenteel voert SQL Server Native Client de verificatiezoekactie uit, waardoor de SPN wordt afgeleid van de exemplaarnaam en de eigenschappen van de netwerkverbinding. SQL Server-exemplaren proberen SPN's te registreren bij het opstarten of ze kunnen handmatig worden geregistreerd. De registratie mislukt echter als er onvoldoende toegangsrechten zijn voor het account dat probeert de SPN's te registreren.

Domein- en computeraccounts worden automatisch geregistreerd in Active Directory. Deze kunnen worden gebruikt als SPN's of beheerders kunnen hun eigen SPN's definiëren. SQL Server maakt veilige verificatie beter beheerbaar en betrouwbaar doordat clients rechtstreeks de SPN kunnen opgeven die moet worden gebruikt.

Notitie

Een SPN die door een clienttoepassing wordt opgegeven, wordt alleen gebruikt wanneer er verbinding wordt gemaakt met geïntegreerde Windows-beveiliging.

Fooi

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.

Zie de volgende artikelen voor meer informatie over Kerberos:

Gebruik

In de volgende tabel worden de meest voorkomende scenario's beschreven waarin clienttoepassingen beveiligde verificatie kunnen inschakelen.

Scenario Beschrijving
Een verouderde toepassing geeft geen SPN op. Dit compatibiliteitsscenario garandeert dat er geen gedragswijziging is voor toepassingen die zijn ontwikkeld voor eerdere versies van SQL Server. Als er geen SPN is opgegeven, is de toepassing afhankelijk van gegenereerde SPN's en weet niet welke verificatiemethode wordt gebruikt.
Een clienttoepassing die de huidige versie van SQL Server Native Client gebruikt, geeft een SPN op in de verbindingsreeks als domeingebruiker of computeraccount, als een exemplaarspecifieke SPN of als een door de gebruiker gedefinieerde tekenreeks. Het trefwoord ServerSPN- kan worden gebruikt in een provider, initialisatie of verbindingsreeks om het volgende te doen:

-Geef het account op dat wordt gebruikt door het SQL Server-exemplaar voor een verbinding. Dit vereenvoudigt de toegang tot Kerberos-verificatie. Als er een KDC (Kerberos Key Distribution Center) aanwezig is en het juiste account is opgegeven, is Kerberos-verificatie waarschijnlijker dan NTLM. De KDC bevindt zich meestal op dezelfde computer als de domeincontroller.

-Geef een SPN op om het serviceaccount voor het SQL Server-exemplaar op te zoeken. Voor elk SQL Server-exemplaar worden twee standaard-SPN's gegenereerd die voor dit doel kunnen worden gebruikt. Deze sleutels zijn echter niet gegarandeerd aanwezig in Active Directory, dus in deze situatie is Kerberos-verificatie niet gegarandeerd.

-Geef een SPN op die wordt gebruikt om het serviceaccount voor het SQL Server-exemplaar op te zoeken. Dit kan elke door de gebruiker gedefinieerde tekenreeks zijn die is toegewezen aan het serviceaccount. In dit geval moet de sleutel handmatig worden geregistreerd in de KDC en moet voldoen aan de regels voor een door de gebruiker gedefinieerde SPN.

Het trefwoord FailoverPartnerSPN kan worden gebruikt om de SPN voor de failoverpartnerserver op te geven. Het bereik van account- en Active Directory-sleutelwaarden is hetzelfde als de waarden die u voor de principal-server kunt opgeven.
Een ODBC-toepassing geeft een SPN op als verbindingskenmerk voor de principal-server of failoverpartnerserver. Het verbindingskenmerk SQL_COPT_SS_SERVER_SPN kan worden gebruikt om de SPN op te geven voor een verbinding met de principal-server.

Het verbindingskenmerk SQL_COPT_SS_FAILOVER_PARTNER_SPN kan worden gebruikt om de SPN voor de failoverpartnerserver op te geven.
Een OLE DB-toepassing geeft een SPN op als een eigenschap voor initialisatie van gegevensbronnen voor de principal-server of voor een failoverpartnerserver. De verbindingseigenschap SSPROP_INIT_SERVER_SPN in de DBPROPSET_SQLSERVERDBINIT eigenschappenset kan worden gebruikt om de SPN voor een verbinding op te geven.

De verbindingseigenschap SSPROP_INIT_FAILOVER_PARTNER_SPN in de DBPROPSET_SQLSERVERDBINIT kan worden gebruikt om de SPN voor de failoverpartnerserver op te geven.
Een gebruiker geeft een SPN op voor een server of failoverpartnerserver in een ODBC-gegevensbronnaam (DSN). De SPN kan worden opgegeven in een ODBC DSN via de DSN-installatiedialoogvensters.
De gebruiker geeft een SPN op voor een server of failoverpartnerserver in een OLE DB-Data Link- of aanmeldingsvenster. De SPN kan worden opgegeven in een Data Link- of aanmeldingsvenster. Het dialoogvenster Aanmelden kan worden gebruikt met ODBC of OLE DB.
Een ODBC-toepassing bepaalt de verificatiemethode die wordt gebruikt om een verbinding tot stand te brengen. Wanneer een verbinding is geopend, kan een toepassing een query uitvoeren op het verbindingskenmerk SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD om te bepalen welke verificatiemethode is gebruikt. De waarden omvatten, maar zijn niet beperkt tot, NTLM- en Kerberos-.
Een OLE DB-toepassing bepaalt de verificatiemethode die wordt gebruikt om een verbinding tot stand te brengen. Wanneer een verbinding is geopend, kan een toepassing een query uitvoeren op de verbindingseigenschap SSPROP_AUTHENTICATION_METHOD in de eigenschap DBPROPSET_SQLSERVERDATASOURCEINFO ingesteld om te bepalen welke verificatiemethode is gebruikt. De waarden omvatten, maar zijn niet beperkt tot, NTLM- en Kerberos-.

Failover

SPN's worden niet opgeslagen in de failovercache en kunnen daarom niet worden doorgegeven tussen verbindingen. SPN's worden gebruikt voor alle verbindingspogingen naar de principal en partner wanneer deze zijn opgegeven in de verbindingsreeks of verbindingskenmerken.

Groepsgewijze verbindingen

Toepassingen moeten er rekening mee houden dat het opgeven van SPN's in sommige, maar niet alle verbindingsreeksen kan bijdragen aan poolfragmentatie.

Toepassingen kunnen programmatisch SPN's opgeven als verbindingskenmerken, in plaats van trefwoorden voor verbindingsreeksen op te geven. Dit kan helpen bij het beheren van fragmentatie van verbindingsgroepen.

Toepassingen moeten er rekening mee houden dat SPN's in verbindingsreeksen kunnen worden overschreven door de bijbehorende verbindingskenmerken in te stellen, maar verbindingsreeksen die worden gebruikt door groepsgewijze verbindingen, gebruiken de verbindingsreekswaarden voor pooldoeleinden.

Down-Level servergedrag

Het nieuwe verbindingsgedrag wordt geïmplementeerd door de client; Daarom is het niet specifiek voor een versie van SQL Server.

Gekoppelde servers en delegatie

Wanneer gekoppelde servers worden gemaakt, kan de @provstr parameter van sp_addlinkedserver worden gebruikt om de SPN's van de server- en failoverpartner op te geven. De voordelen hiervan zijn hetzelfde als het opgeven van SPN's in clientverbindingsreeksen: het is eenvoudiger en betrouwbaarder om verbindingen tot stand te brengen die gebruikmaken van Kerberos-verificatie.

Voor delegatie met gekoppelde servers is Kerberos-verificatie vereist.

Beheeraspecten van SPN's die zijn opgegeven door toepassingen

Wanneer u kiest of u SPN's in een toepassing (via verbindingsreeksen) of programmatisch wilt opgeven via verbindingseigenschappen (in plaats van te vertrouwen op de door de standaardprovider gegenereerde SPN's), moet u rekening houden met de volgende factoren:

  • Beveiliging: Geeft de opgegeven SPN informatie weer die is beveiligd?

  • Betrouwbaarheid: Als u het gebruik van standaard-SPN's wilt inschakelen, moet het serviceaccount waarin het SQL Server-exemplaar wordt uitgevoerd voldoende bevoegdheden hebben om de Active Directory op de KDC bij te werken.

  • Transparantie van gemak en locatie: Hoe worden de SPN's van een toepassing beïnvloed als de database wordt verplaatst naar een ander SQL Server-exemplaar? Dit is van toepassing op zowel de principal-server als de failoverpartner als u databasespiegeling gebruikt. Als een serverwijziging betekent dat SPN's moeten worden gewijzigd, hoe is dit van invloed op toepassingen? Worden er wijzigingen beheerd?

De SPN opgeven

U kunt een SPN opgeven in dialoogvensters en in code. In deze sectie wordt beschreven hoe u een SPN kunt opgeven.

De maximale lengte voor een SPN is 260 tekens.

De syntaxis die SPN's gebruiken in verbindingsreeks of verbindingskenmerken is als volgt:

Syntaxis Beschrijving
MSSQLSvc/fqdn- De door de provider gegenereerde standaard-SPN voor een standaardexemplaren wanneer een ander protocol dan TCP wordt gebruikt.

fqdn- is een volledig gekwalificeerde domeinnaam.
MSSQLSvc/fqdn-:poort De door de provider gegenereerde standaard-SPN wanneer TCP wordt gebruikt.

poort is een TCP-poortnummer.
MSSQLSvc/fqdn-:InstanceName De door de provider gegenereerde, standaard SPN voor een benoemd exemplaar wanneer een ander protocol dan TCP wordt gebruikt.

InstanceName is een SQL Server-exemplaarnaam.
HOST/fqdn

HOST/MachineName
De SPN die wordt toegewezen aan ingebouwde computeraccounts die automatisch worden geregistreerd door Windows.
gebruikersnaam@domein Directe specificatie van een domeinaccount.

Gebruikersnaam is een Windows-gebruikersaccountnaam.

Domein is een Windows-domeinnaam of volledig gekwalificeerde domeinnaam.
MachineName$@Domain Directe specificatie van een computeraccount.

(Als de server waarmee u verbinding maakt, wordt uitgevoerd onder LOCAL SYSTEM- of NETWORK SERVICE-accounts om Kerberos-verificatie op te halen, kan ServerSPN- de indeling MachineName$@Domain hebben.)
KDCKey/MachineName- Een door de gebruiker opgegeven SPN.

KDCKey is een alfanumerieke tekenreeks die voldoet aan de regels voor een KDC-sleutel.

ODBC- en OLE DB-syntaxis die SPN's ondersteunt

Zie de volgende onderwerpen voor syntaxisspecifieke informatie:

Zie ook

systeemeigen SQL Server-clientfuncties
Een service-principalnaam registreren voor Kerberos-verbindingen