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 SQL Server instance. 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.
Notes
Si le serveur ne parvient pas à inscrire automatiquement le SPN, celui-ci doit être inscrit manuellement. Consultez 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 ;
Conseil
Microsoft 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.
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.
Notes
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 Database Engine 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 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 managé (MSA). Les comptes virtuels et les comptes 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 au démarrage et l’administrateur de domaine doit inscrire le SPN manuellement.
Notes
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 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 How to use Kerberos authentication in SQL Server (Procédure d’utilisation de 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 dans l’article How to Implement Kerberos Constrained Delegation with SQL Server 2008 (Procédure d’implémentation de la délégation contrainte Kerberos à l’aide de SQL Server 2008).
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|nom_instance], 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.
Notes
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’un instance de SQL Server. |
Inscription automatique des SPN
Lors du démarrage d’une instance Moteur de base de données SQL Server, SQL Server tente d’inscrire le nom SPN du service SQL Server. Lors de l’arrêt de l’instance, SQL Server tente d’annuler l’inscription du nom SPN. Pour une connexion TCP/IP, le SPN est inscrit au format MSSQLSvc/<FQDN>:<tcpport>. Les instances nommées et les instance par défaut sont inscrites en tant que MSSQLSvc, en s’appuyant sur la <valeur tcpport> pour différencier les instances.
Pour les autres connexions qui prennent en charge Kerberos, le nom 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 microsoft Windows Server 2003. Pour plus d’informations, consultez l’article de la Base de connaissances 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
Remarque S’il existe déjà un nom 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 nom SPN au format MSSQLSvc/FQDN:[port] est utilisé à la fois pour les instances nommées et par défaut.
Pour les canaux nommés et les connexions à mémoire partagée, un nom de principal de service au format NOM de domaine complet MSSQLSvc/:nom_instance est utilisé pour un instance nommé, et le nom de domaine complet MSSQLSvc/est utilisé pour la 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.
Scénario | 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 le service SQL Server s’exécute. |
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 le service SQL Server s’exécute. |
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 nom SPN échoue au 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
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)
Fonctionnalités de SQL Server Native Client
Gérer les problèmes d’authentification Kerberos dans un environnement Reporting Services