Inscrire un nom de principal du service pour les connexions Kerberos

Pour utiliser l'authentification Kerberos avec SQL Server, les deux conditions suivantes doivent être remplies :

  • Les ordinateurs clients et serveurs doivent faire partie du même domaine Windows ou appartenir à des domaines approuvés.

  • Un nom de principal du service (SPN, Service Principal Name) doit être inscrit dans Active Directory, qui joue le rôle de centre de distribution de clés dans un domaine Windows. Une fois inscrit, le SPN est mappé au compte Windows qui a démarré le service de l'instance de SQL Server. Si l'inscription du SPN n'a pas été effectuée ou échoue, la couche de sécurité Windows ne peut pas déterminer le compte associé au SPN et l'authentification Kerberos ne sera pas utilisée.

    [!REMARQUE]

    Si le serveur ne parvient pas à inscrire automatiquement le SPN, celui-ci doit être inscrit manuellement. Voir Inscription manuelle des SPN.

Vous pouvez vérifier qu'une connexion utilise Kerberos en interrogeant la vue de gestion dynamique sys.dm_exec_connections. Exécutez la requête suivante et vérifiez la valeur de la colonne auth_scheme, qui sera « KERBEROS » si Kerberos est activé.

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;
ConseilConseil

Le MicrosoftGestionnaire de configuration de Kerberos pour SQL Server est un outil de diagnostic qui permet de dépanner les problèmes de connexion que rencontre Kerberos avec SQL Server. Pour plus d'informations, consultez Gestionnaire de configuration de Microsoft Kerberos pour SQL Server.

Dans cette rubrique

Cette rubrique contient les sections suivantes :

  • Rôle du SPN dans l'authentification

  • Autorisations

  • Formats de SPN

  • Inscription automatique des SPN

  • Inscription manuelle des SPN

  • Connexions clientes

  • Paramètres par défaut de l'authentification

  • Commentaires

Rôle du SPN dans l'authentification

Lorsqu'une application ouvre une connexion et utilise l'authentification Windows, SQL Server Native Client transmet le nom de l'ordinateur SQL Server, le nom de l'instance et, éventuellement, un SPN. Si la connexion transmet un SPN, il est utilisé sans aucune modification.

Si la connexion ne transmet pas de SPN, un SPN par défaut est construit à partir du protocole utilisé, du nom de serveur et du nom de l'instance.

Dans les deux scénarios précédents, le SPN est envoyé au centre de distribution de clés pour obtenir un jeton de sécurité en vue d'authentifier la connexion. Si un jeton de sécurité ne peut pas être obtenu, l'authentification utilise le protocole NTLM.

Le nom de principal du service (SPN) est le nom par lequel un client identifie de manière unique l'instance d'un service. Le service d'authentification Kerberos peut utiliser le nom principal d'un service pour authentifier un service. Pour se connecter à un service, le client localise une instance du service, compose le nom principal du service pour cette instance, se connecte au service et présente le nom principal de service pour que le service s'authentifie.

[!REMARQUE]

Les informations fournies dans cette rubrique s'appliquent également aux configurations SQL Server qui utilisent le clustering.

L'Authentification Windows est la méthode recommandée pour authentifier les utilisateurs sur SQL Server. Les clients qui utilisent l'Authentification Windows sont authentifiés à l'aide de NTLM ou Kerberos. Dans un environnement Active Directory, l'authentification Kerberos est toujours tentée en premier. L'authentification Kerberos n'est pas disponible pour les clients SQL Server 2005 utilisant des canaux nommés.

Autorisations

Lorsque le service du Moteur de base de données démarre, il tente d'enregistrer le nom de principal du service (SPN). Si le compte qui démarre SQL Server n'a pas l'autorisation d'enregistrer un SPN dans les services de domaine Active Directory, cet appel échouera et un message d'avertissement sera consigné dans le journal des événements de l'application, ainsi que dans le journal des erreurs SQL Server. Pour inscrire le SPN, le Moteur de base de données doit s'exécuter sous un compte intégré, tel que Système local (non recommandé) ou SERVICE RÉSEAU, ou sous un compte qui a l'autorisation d'inscrire un SPN, tel qu'un compte d'administrateur de domaine. Lorsque SQL Server s'exécute sur le système d'exploitation Windows 7 ou Windows Server 2008 R2, vous pouvez exécuter SQL Server à l'aide d'un compte virtuel ou d'un compte de service administré (MSA). Les comptes virtuels t de service administré peuvent inscrire un SPN. Si SQL Server ne s'exécute pas sous l'un de ces comptes, le SPN n'est pas inscrit lors du démarrage et l'administrateur de domaine doit l'inscrire manuellement.

[!REMARQUE]

Lorsque le domaine Windows est configuré pour s'exécuter à un niveau fonctionnel inférieur à celui de Windows Server 2008 R2, le compte de service administré n'a pas les autorisations nécessaires pour inscrire le SPN pour le service du Moteur de base de données SQL Server. Si l'authentification Kerberos est requise, l'administrateur de domaine doit inscrire manuellement les SPN SQL Server le compte de service administré.

L'article de la Base de connaissances portant sur la façon d'utiliser l'authentification Kerberos dans SQL Server contient des informations sur la manière d'accorder une autorisation de lecture ou d'écriture à un SPN pour un compte qui n'est pas Administrateur de domaine.

Des informations supplémentaires sont disponibles sur le site How to Implement Kerberos Constrained Delegation with SQL Server 2008 (en anglais).

Formats de SPN

À compter de SQL Server 2008, le format des SPN est modifié afin de prendre en charge l'authentification Kerberos sur le protocole TCP/IP, les canaux nommés et la mémoire partagée. Les formats de SPN pris en charge pour les instances nommées et par défaut sont les suivants.

Instance nommée

  • MSSQLSvc/FQDN:[port | instancename], où :

    • MSSQLSvc est le service en cours d'inscription.

    • FQDN est le nom de domaine complet du serveur.

    • port est le numéro de port TCP.

    • nom_instance est le nom de l'instance SQL Server.

Instance par défaut

  • MSSQLSvc/FQDN:port | MSSQLSvc/FQDN, où :

    • MSSQLSvc est le service en cours d'inscription.

    • FQDN est le nom de domaine complet du serveur.

    • port est le numéro de port TCP.

Le nouveau format SPN ne requiert pas de numéro de port. Cela signifie qu'un serveur à port multiple ou un protocole qui n'utilise pas de numéro de port peut utiliser l'authentification Kerberos.

[!REMARQUE]

Dans le cas d'une connexion TCP/IP, où le port TCP est inclus dans le SPN, SQL Server doit activer le protocole TCP afin de permettre à un utilisateur de se connecter à l'aide de l'authentification Kerberos.

MSSQLSvc/fqdn:port

Nom principal de service par défaut, généré par le fournisseur, lorsque le protocole TCP est utilisé. port est un numéro de port TCP.

MSSQLSvc/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é. fqdn est un nom de domaine complet.

MSSQLSvc/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é. InstanceName est le nom d'une instance de SQL Server.

Inscription automatique des SPN

Lors du démarrage d'une instance du Moteur de base de données SQL Server, SQL Server tente d'inscrire le nom principal du service SQL Server. Dès l'arrêt de l'instance, SQL Server tente d'annuler l'inscription du SPN. Pour une connexion TCP/IP, le SPN est inscrit au format MSSQLSvc/<FQDN>:<porttcp>. Les instances nommées et l'instance par défaut sont inscrites en tant que MSSQLSvc et seule la valeur de <porttcp> différencie les instances.

Pour les autres connexions qui prennent en charge Kerberos, le SPN est inscrit au format MSSQLSvc/<FQDN>:<nom_instance> pour une instance nommée. Le format pour l'inscription de l'instance par défaut est MSSQLSvc/<FQDN>.

Une intervention manuelle peut être requise pour inscrire ou annuler l'inscription du SPN si le compte de service ne possède pas les autorisations requises pour ces actions.

Inscription manuelle des SPN

Pour inscrire le SPN manuellement, l'administrateur doit utiliser l'outil Setspn.exe fourni avec les Outils de support de Microsoft Windows Server 2003. Pour plus d'informations, consultez l'article de la Base de connaissances relatif aux Outils de support de Windows Server 2003 Service Pack 1.

Setspn.exe est un outil de ligne de commande qui vous permet de lire, modifier et supprimer la propriété du répertoire des Noms de principaux du service (SPN). Cet outil vous permet également d'afficher les SPN actuels, de réinitialiser les SPN par défaut du compte et d'ajouter ou de supprimer des SPN supplémentaires.

L'exemple suivant illustre la syntaxe utilisée pour inscrire manuellement un SPN pour une connexion TCP/IP.

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

RemarqueS'il existe déjà un SPN, il doit être supprimé avant de pouvoir être réinscrit. Pour cela, utilisez la commande setspn avec le commutateur -D. Les exemples suivants illustrent comment inscrire manuellement un nouveau SPN basé sur une instance. Pour une instance par défaut, utilisez :

setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname

Pour une instance nommée, utilisez :

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

Connexions clientes

Les SPN spécifiés par l'utilisateur sont pris en charge dans les pilotes clients. Toutefois, si aucun SPN n'est fourni, il est généré automatiquement en fonction du type de connexion cliente. Pour une connexion TCP, un SPN au format MSSQLSvc/FQDN: [port] est utilisé à la fois pour les instances nommées et les instances par défaut.

Pour les connexions par canaux nommés et mémoire partagée, un SPN au format MSSQLSvc/FQDN:nom_instance est utilisé pour une instance nommée et MSSQLSvc/FQDN est utilisé pour l'instance par défaut.

Utilisation d'un compte de service comme SPN

Les comptes de service peuvent être utilisés comme SPN. Ils sont spécifiés par le biais de l'attribut de connexion pour l'authentification Kerberos et assument les formats suivants :

  • nom_utilisateur@domaine ou domaine\nom_utilisateur pour un compte d'utilisateur de domaine

  • ordinateur$@domaine ou hôte\FQDN pour un compte de domaine d'ordinateur tel que Système Local ou SERVICES RÉSEAU.

Pour déterminer la méthode d'authentification d'une connexion, exécutez la requête suivante.

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

Paramètres par défaut de l'authentification

Le tableau suivant décrit les paramètres d'authentification par défaut utilisés selon les scénarios d'inscription de SPN.

Scenario

Méthode d'authentification

Le SPN est mappé au compte de domaine, au compte virtuel, au compte de service administré ou au compte intégré approprié. Par exemple, Système local ou SERVICE RÉSEAU.

[!REMARQUE]

Correct signifie que le compte mappé par le SPN inscrit est le compte sous lequel s'exécute le service SQL Server.

Les connexions locales utilisent NTLM, les connexions distantes utilisent Kerberos.

Le SPN est le compte de domaine, le compte virtuel, le compte de service administré ou le compte intégré approprié.

[!REMARQUE]

Correct signifie que le compte mappé par le SPN inscrit est le compte sous lequel s'exécute le service SQL Server.

Les connexions locales utilisent NTLM, les connexions distantes utilisent Kerberos.

Le SPN est mappé à un compte de domaine, un compte virtuel, un compte de service administré ou un compte intégré erroné.

L'authentification échoue.

La recherche du SPN échoue ou ne mappe pas à un compte de domaine, un compte virtuel, un compte de service administré ou un compte intégré correct, ou n'est pas un compte de domaine, un compte virtuel, un compte de service administré ou un compte intégré correct.

Les connexions locales et distantes utilisent NTLM.

Commentaires

La connexion administrateur dédiée utilise un SPN basé sur un nom d'instance. L'authentification Kerberos peut être utilisée avec une connexion DAC si l'inscription de ce SPN réussit. En guise d'alternative, un utilisateur peut spécifier le nom du compte comme SPN.

Si l'inscription du SPN échoue pendant le démarrage, cet échec est consigné dans le journal des erreurs de SQL Server et le démarrage se poursuit.

Si l'annulation de l'inscription du SPN échoue pendant l'arrêt, cet échec est consigné dans le journal des erreurs de SQL Server et l'arrêt se poursuit.

Voir aussi

Concepts

Prise en charge des noms de principaux du service (SPN) dans les connexions clientes

Noms de principaux du service (SPN) dans les connexions clientes (OLE DB)

Noms de principaux du service (SPN) dans les connexions clientes (ODBC)

Autres ressources

Fonctionnalités de SQL Server Native Client

Manage Kerberos Authentication Issues in a Reporting Services Environment (en anglais)