Prise en charge des noms de principaux du service (SPN) dans les connexions clientesService Principal Name (SPN) Support in Client Connections

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure Synapse Analytics (SQL DW) ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

À partir de SQL Server 2008SQL Server 2008, la prise en charge des noms de principal du service (SPN) a été étendue pour permettre une authentification mutuelle entre tous les protocoles.Beginning with SQL Server 2008SQL Server 2008, support for service principal names (SPNs) has been extended to enable mutual authentication across all protocols. Dans les versions antérieures de SQL ServerSQL Server, les noms de principal du service étaient pris en charge uniquement pour Kerberos sur TCP quand le nom de principal du service par défaut de l’instance de SQL ServerSQL Server était inscrit auprès d’Active Directory.In previous versions of SQL ServerSQL Server, SPNs were only supported for Kerberos over TCP when the default SPN for the SQL ServerSQL Server instance was registered with Active Directory.

Les noms de principal du service sont utilisés par le protocole d’authentification pour déterminer le compte dans lequel s’exécute une instance de SQL ServerSQL Server.SPNs are used by the authentication protocol to determine the account in which a SQL ServerSQL Server instance runs. Si le compte de l'instance est connu, l'authentification Kerberos peut être utilisée pour fournir une authentification mutuelle par le client et le serveur.If the instance account is known, Kerberos authentication can be used to provide mutual authentication by the client and server. Si le compte de l'instance n'est pas connu, l'authentification NTLM, qui fournit uniquement une authentification du client par le serveur, est utilisée.If the instance account is not known, NTLM authentication, which only provides authentication of the client by the server, is used. Actuellement, SQL ServerSQL Server Native Client effectue la recherche d'authentification en faisant dériver le nom principal de service du nom de l'instance et des propriétés de connexion réseau.Currently, SQL ServerSQL Server Native Client performs the authentication lookup, deriving the SPN from the instance name and network connection properties. Les instances de SQL ServerSQL Server tentent d’inscrire les noms de principal du service au démarrage, mais ces derniers peuvent également être inscrits manuellement.SQL ServerSQL Server instances will attempt to register SPNs on startup, or they can be registered manually. Toutefois, l'inscription échoue si les droits d'accès sont insuffisants pour le compte qui essaie d'inscrire les noms principaux de service.However, registration will fail if there are insufficient access rights for the account that attempts to register the SPNs.

Les comptes de domaine et d'ordinateur sont inscrits automatiquement dans Active Directory.Domain and computer accounts are registered automatically in Active Directory. Ils peuvent être utilisés comme noms principaux de service ; par ailleurs, les administrateurs peuvent définir leurs propres noms principaux de service.These can be used as SPNs, or administators can define their own SPNs. SQL ServerSQL Server rend l’authentification sécurisée plus gérable et plus fiable en autorisant les clients à spécifier directement le nom de principal du service à utiliser.SQL ServerSQL Server makes secure authentication more manageable and reliable by allowing clients to directly specify the SPN to use.

Notes

Un nom principal de service spécifié par une application cliente est utilisé uniquement lorsqu'une connexion est établie avec la sécurité intégrée Windows.An SPN specified by a client application is only used when a connection is made with Windows integrated security.

Conseil

**Kerberos Configuration Manager pour SQL ServerSQL Server est un outil de diagnostic qui permet de résoudre les problèmes liés à la connectivité Kerberos avec. MicrosoftMicrosoft ** SQL ServerSQL ServerMicrosoftMicrosoft Kerberos Configuration Manager for SQL ServerSQL Server is a diagnostic tool that helps troubleshoot Kerberos related connectivity issues with SQL ServerSQL Server. Pour plus d'informations, consultez Gestionnaire de configuration de Microsoft Kerberos pour SQL Server.For more information, see Microsoft Kerberos Configuration Manager for SQL Server.

Pour plus d'informations sur Kerberos, consultez les articles suivants :For more information about Kerberos, see the following articles:

UsageUsage

Le tableau suivant décrit les scénarios les plus courants dans lesquels les applications clientes peuvent activer l'authentification sécurisée.The following table describes the most common scenarios in which client applications can enable secure authentication.

ScénarioScenario DescriptionDescription
Une application héritée ne spécifie pas de nom principal de service.A legacy application does not specify an SPN. Ce scénario de compatibilité garantit l'absence de tout changement de comportement dans les applications développées pour les versions antérieures de SQL ServerSQL Server.This compatibility scenario guarantees that there will be no behavior change for applications developed for previous versions of SQL ServerSQL Server. Si aucun nom principal de service n'est spécifié, l'application s'appuie sur les noms principaux de service générés et n'a aucune connaissance de la méthode d'authentification utilisée.If no SPN is specified, the application relies on generated SPNs and has no knowledge of which authentication method is used.
Une application cliente utilisant la version actuelle de SQL ServerSQL Server Native Client spécifie un nom principal de service dans la chaîne de connexion en tant que compte d'utilisateur de domaine ou compte d'ordinateur de domaine, en tant que nom principal de service spécifique à une instance ou en tant que chaîne définie par l'utilisateur.A client application using the current version of SQL ServerSQL Server Native Client specifies an SPN in the connection string as a domain user or computer account, as an instance-specific SPN, or as a user-defined string. Le mot clé ServerSPN peut être utilisé dans une chaîne de fournisseur, une chaîne d'initialisation ou une chaîne de connexion afin d'effectuer les opérations suivantes :The ServerSPN keyword can be used in a provider, initialization, or connection string to do the following:

-Spécifiez le compte utilisé par l’instance de SQL ServerSQL Server pour une connexion.-Specify the account used by the SQL ServerSQL Server instance for a connection. Cela simplifie l'accès à l'authentification Kerberos.This simplifies access to Kerberos authentication. Si un centre de distribution de clés Kerberos (KDC) est présent et si le compte approprié est spécifié, l'utilisation de l'authentification Kerberos est plus probable que celle de l'authentification NTLM.If a Kerberos Key Distribution Center (KDC) is present and the correct account is specified, Kerberos authentication is more likely to be used than NTLM. Le centre de distribution de clés se trouve habituellement sur le même ordinateur que le contrôleur de domaine.The KDC usually resides on the same computer as the domain controller.

-Spécifiez un nom de principal du service pour rechercher le compte de service de l’instance de SQL ServerSQL Server.-Specify an SPN to look up the service account for the SQL ServerSQL Server instance. Pour chaque instance de SQL ServerSQL Server, deux noms de principal du service par défaut sont générés et peuvent être utilisés à cette fin.For every SQL ServerSQL Server instance, two default SPNs are generated that can be used for this purpose. Toutefois, il n'est pas certain que ces clés soient présentes dans Active Directory ; par conséquent, dans cette situation, l'authentification Kerberos n'est pas garantie.These keys are not guaranteed to be present in Active Directory, however, so in this situation Kerberos authentication is not guaranteed.

-Spécifiez un nom de principal du service à utiliser pour rechercher le compte de service de l’instance de SQL ServerSQL Server.-Specify an SPN that will be used to look up the service account for the SQL ServerSQL Server instance. Il peut s'agir de n'importe quelle chaîne définie par l'utilisateur et mappée au compte de service.This can be any user-defined string that maps to the service account. Dans ce cas, la clé doit être inscrite manuellement dans le centre de distribution de clés et doit répondre aux exigences relatives à un nom principal de service défini par l'utilisateur.In this case, the key must be registered manually in the KDC and must satisfy the rules for a user-defined SPN.

Le mot clé FailoverPartnerSPN peut être utilisé pour spécifier le nom principal de service du serveur partenaire de basculement.The FailoverPartnerSPN keyword can be used to specify the SPN for the failover partner server. La plage des valeurs de comptes et de clés Active Directory est identique à celle des valeurs que vous pouvez spécifier pour le serveur principal.The range of account and Active Directory key values is the same as the values you can specify for the principal server.
Une application ODBC spécifie un nom principal de service en tant qu'attribut de connexion pour le serveur principal ou le partenaire de basculement.An ODBC application specifies an SPN as a connection attribute for the principal server or failover partner server. L'attribut de connexion SQL_COPT_SS_SERVER_SPN peut être utilisé pour spécifier le nom principal de service d'une connexion au serveur principal.The connection attribute SQL_COPT_SS_SERVER_SPN can be used to specify the SPN for a connection to the principal server.

L'attribut de connexion SQL_COPT_SS_FAILOVER_PARTNER_SPN peut être utilisé pour spécifier le nom principal de service du serveur partenaire de basculement.The connection attribute SQL_COPT_SS_FAILOVER_PARTNER_SPN can be used to specify the SPN for the failover partner server.
Une application OLE DB spécifie un nom principal de service en tant que propriété d'initialisation d'une source de données pour le serveur principal ou pour un partenaire de basculement.An OLE DB application specifies an SPN as a data source initialization property for the principal server or for a failover partner server. La propriété de connexion SSPROP_INIT_SERVER_SPN du jeu de propriétés DBPROPSET_SQLSERVERDBINIT peut être utilisée pour spécifier le nom principal de service d'une connexion.The connection property SSPROP_INIT_SERVER_SPN in the DBPROPSET_SQLSERVERDBINIT property set can be used to specify the SPN for a connection.

La propriété de connexion SSPROP_INIT_FAILOVER_PARTNER_SPN dans DBPROPSET_SQLSERVERDBINIT peut être utilisée pour spécifier le nom principal de service du serveur partenaire de basculement.The connection property SSPROP_INIT_FAILOVER_PARTNER_SPN in the DBPROPSET_SQLSERVERDBINIT can be used to specify the SPN for the failover partner server.
Un utilisateur spécifie un nom principal de service pour un serveur ou un partenaire de basculement dans un nom de source de données ODBC.A user specifies an SPN for a server or failover partner server in an ODBC data source name (DSN). Le nom principal de service peut être spécifié dans un nom de source de données ODBC via les boîtes de dialogue d'installation du nom de la source de données.The SPN can be specified in an ODBC DSN through the DSN setup dialog boxes.
L'utilisateur spécifie un nom principal de service pour un serveur ou un serveur partenaire de basculement dans une boîte de dialogue Liaison de données ou Connexion OLE DB.The user specifies an SPN for a server or failover partner server in an OLE DB Data Link or Login dialog box. Le nom principal de service peut être spécifié dans une boîte de dialogue Liaison de données ou Connexion .The SPN can be specified in a Data Link or Login dialog box. La boîte de dialogue Connexion peut être utilisée avec ODBC ou OLE DB.The Login dialog box can be used with either ODBC or OLE DB.
Une application ODBC détermine la méthode d'authentification utilisée pour établir une connexion.An ODBC application determines the authentication method used to establish a connection. Lorsqu'une connexion est ouverte avec succès, une application peut interroger l'attribut de connexion SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD pour déterminer la méthode d'authentification utilisée.When a connection has been opened successfully, an application can query the connection attribute SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD to determine which authentication method was used. Les valeurs incluent NTLM et Kerberosmais ne se limitent pas à ces dernières.The values will include, but are not limited to, NTLM and Kerberos.
Une application OLE DB détermine la méthode d'authentification utilisée pour établir une connexion.An OLE DB application determines the authentication method used to establish a connection. Lorsqu'une connexion est ouverte avec succès, une application peut interroger la propriété de connexion SSPROP_AUTHENTICATION_METHOD dans le jeu de propriétés DBPROPSET_SQLSERVERDATASOURCEINFO pour déterminer la méthode d'authentification utilisée.When a connection has been opened successfully, an application can query the connection property SSPROP_AUTHENTICATION_METHOD in the DBPROPSET_SQLSERVERDATASOURCEINFO property set to determine which authentication method was used. Les valeurs incluent NTLM et Kerberosmais ne se limitent pas à ces dernières.The values will include, but are not limited to, NTLM and Kerberos.

BasculementFailover

Les noms principaux de service ne sont pas stockés dans le cache de basculement et par conséquent ne peuvent pas être passés entre les connexions.SPNs are not stored in the failover cache and therefore cannot be passed between connections. Les noms principaux de service sont utilisés lors de toutes les tentatives de connexion au principal et au serveur partenaire lorsque cela est spécifié dans la chaîne de connexion ou les attributs de connexion.SPNs will be used on all connection attempts to the principal and partner when specified in the connection string or connection attributes.

Regroupement de connexionsConnection Pooling

Les applications doivent prendre en compte le fait que la spécification de noms principaux de service dans une partie (au lieu de la totalité) des chaînes de connexion peut contribuer à la fragmentation du regroupement.Applications should be aware that specifying SPNs in some but not all connection strings can contribute to pool fragmentation.

Les applications peuvent spécifier par programme des noms principaux de service en tant qu'attributs de connexion, au lieu de spécifier des mots clés de chaînes de connexion.Applications can programmatically specify SPNs as connection attributes, instead of specifying connection string keywords. Cela peut permettre de gérer la fragmentation du regroupement de connexions.This can help manage connection pool fragmentation.

Les applications doivent prendre en compte le fait que les noms principaux de service dans les chaînes de connexion peuvent être substitués en définissant les attributs de connexion correspondants ; toutefois, les chaînes de connexion utilisées par le regroupement de connexions tirent parti des valeurs de chaînes de connexion à des fins de regroupement.Applications should be aware that SPNs in connection strings can be overridden by setting the corresponding connection attributes, but connection strings used by connection pooling will use the connection string values for pooling purposes.

Comportement de serveur de bas niveauDown-Level Server Behavior

Le nouveau comportement de connexion est implémenté par le client ; par conséquent, il n'est pas spécifique à une version de SQL ServerSQL Server.The new connection behavior is implemented by the client; therefore, it is not specific to a version of SQL ServerSQL Server.

Serveurs liés et délégationLinked Servers and Delegation

Lorsque des serveurs liés sont créés, ** @** le paramètre provstr de sp_addlinkedserver peut être utilisé pour spécifier les noms principaux de service du serveur et du partenaire de basculement.When linked servers are created, the @provstr parameter of sp_addlinkedserver can be used to specify the server and failover partner SPNs. Les avantages de ce choix sont les mêmes que pour la spécification de noms principaux de service dans les chaînes de connexion des clients : davantage de simplicité et de fiabilité pour l'établissement des connexions qui utilisent l'authentification Kerberos.The benefits of doing this are the same as specifying SPNs in client connection strings: It is simpler and more reliable to establish connections that use Kerberos authentication.

La délégation avec des serveurs liés requiert l'authentification Kerberos.Delegation with linked servers requires Kerberos authentication.

Aspects liés à la gestion des noms principaux de service spécifiés par les applicationsManagement Aspects of SPNs Specified by Applications

Au moment de choisir s'il faut spécifier des noms principaux de service dans une application (via les chaînes de connexion) ou par programme via les propriétés de connexion (au lieu de recourir aux noms principaux de service par défaut générés par le fournisseur), prenez en considération les facteurs suivants :When choosing whether to specify SPNs in an application (through connection strings) or programmatically through connection properties (rather than relying on the defalt provider generated SPNs), consider the following factors:

  • Sécurité : est-ce que le nom principal de service spécifié divulgue des informations protégées ?Security: Does the specified SPN disclose information that is protected?

  • Fiabilité : pour permettre l’utilisation des noms de principal du service par défaut, le compte de service dans lequel s’exécute l’instance de SQL ServerSQL Server doit avoir les privilèges suffisants pour mettre à jour Active Directory sur le centre de distribution de clés.Reliability: To enable the use of default SPNs, the service account in which the SQL ServerSQL Server instance runs must have sufficient privileges to update the Active Directory on the KDC.

  • Commodité et transparence de l'emplacement : comment les noms principaux de service d'une application sont-ils affectés si la base de données correspondante est déplacée vers une autre instance de SQL ServerSQL Server ?Convenience and location transparency: How will an application's SPNs be affected if its database moves to a different SQL ServerSQL Server instance? Cela s'applique à la fois au serveur principal et à son partenaire de basculement, si vous utilisez la mise en miroir de bases de données.This applies to both the principal server and its failover partner if you use database mirroring. Si une modification du serveur signifie une modification des noms principaux de service, comment cela affecte-t-il les applications ?If a server change means that SPNs must be changed, how will this affect applications? Est-ce que les modifications sont gérées ?Will any changes be managed?

Spécification du nom principal de serviceSpecifying the SPN

Vous pouvez spécifier un nom principal de service dans les boîtes de dialogue et dans le code.You can specify an SPN in dialog boxes and in code. Cette section explique comment vous pouvez spécifier un nom principal de service.This section discusses how you can specify an SPN.

La longueur maximale d'un nom principal de service est 260 caractères.The maximum length for an SPN is 260 characters.

La syntaxe que les noms principaux de service utilisent dans la chaîne de connexion ou les attributs de connexion est la suivante :The syntax that SPNs use in connection string or connection attributes is as follows:

SyntaxeSyntax DescriptionDescription
MSSQLSvc/fqdnMSSQLSvc/fqdn Nom principal de service par défaut, généré par le fournisseur, pour une instance par défaut lorsqu'un autre protocole que TCP est utilisé.The provider-generated, default SPN for a default instance when a protocol other than TCP is used.

FQDN est un nom de domaine complet.fqdn is a fully-qualified domain name.
MSSQLSvc/FQDN:portMSSQLSvc/fqdn:port Nom principal de service par défaut, généré par le fournisseur, lorsque le protocole TCP est utilisé.The provider-generated, default SPN when TCP is used.

le port est un numéro de port TCP.port is a TCP port number.
MSSQLSvc/FQDN:nom_instanceMSSQLSvc/fqdn:InstanceName Nom principal de service par défaut, généré par le fournisseur, pour une instance nommée lorsqu'un autre protocole que TCP est utilisé.The provider-generated, default SPN for a named instance when a protocol other than TCP is used.

InstanceName est un SQL ServerSQL Server nom d’instance.InstanceName is a SQL ServerSQL Server instance name.
HOST/fqdnHOST/fqdn

HOST/MachineNameHOST/MachineName
Nom principal de service mappé aux comptes d'ordinateur intégrés qui sont inscrits automatiquement par Windows.The SPN that maps to built-in computer accounts that are automatically registered by Windows.
Domaine du nom d’utilisateur@**Username@Domain Spécification directe d'un compte de domaine.Direct specification of a domain account.

Username est un nom de compte d’utilisateur Windows.Username is a Windows user account name.

Domain est un nom de domaine Windows ou un nom de domaine complet.Domain is a Windows domain name or fully-qualified domain name.
**$@*Domaine* MachineNameMachineName$@Domain Spécification directe d'un compte d'ordinateur.Direct specification of a computer account.

(Si le serveur auquel vous vous connectez s'exécute sous les comptes LOCAL SYSTEM ou NETWORK SERVICE, pour obtenir l'authentification Kerberos, ServerSPN peut être au format MachineName$@Domain .)(If the server you are connecting to is running under LOCAL SYSTEM or NETWORK SERVICE accounts, to get Kerberos authentication, ServerSPN can be in the MachineName$@Domain format.)
KDCKey/MachineNameKDCKey/MachineName Nom principal de service spécifié par l'utilisateur.A user-specified SPN.

KDCKey est une chaîne alphanumérique conforme aux règles d’une clé KDC.KDCKey is an alphanumeric string that conforms to the rules for a KDC key.

Syntaxe ODBC et OLE DB prenant en charge les noms principaux de serviceODBC and OLE DB Syntax Supporting SPNs

Pour plus d'informations spécifiques à la syntaxe, consultez les rubriques suivantes :For syntax-specific information, see the following topics:

Pour plus d'informations sur les exemples d'applications qui illustrent cette fonctionnalité, consultez Exemples de programmabilité des données SQL Server.For information about sample applications that demonstrate this feature, see SQL Server Data Programmability Samples.

Voir aussiSee Also

Fonctionnalités de SQL Server Native ClientSQL Server Native Client Features
Inscrire un nom de principal du service pour les connexions KerberosRegister a Service Principal Name for Kerberos Connections