Je trouve des informations contradictoires sur la façon de formater exactement les noms principaux de service (SPN) pour obtenir les connexions Kerberos appropriées et le nombre dont j'ai besoin pour chaque instance SQL.
Ce document MS 2017 contient les éléments suivants:
À partir de SQL Server 2008, le format SPN est modifié afin de prendre en charge l'authentification Kerberos sur TCP/IP, les canaux nommés et la mémoire partagée. Les formats SPN pris en charge pour les instances nommées et par défaut sont les suivants.
- Instance nommée:
MSSQLSvc/FQDN:[port|instancename]
- Instance par défaut:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
Le nouveau format SPN ne nécessite pas de numéro de port . Cela signifie qu'un serveur à plusieurs ports ou un protocole qui n'utilise pas de numéros de port peut utiliser l'authentification Kerberos.
J'ai pris ce dernier paragraphe pour signifier que je n'ai besoin que d'une seule entrée, l'une des suivantes:
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org
Cela semble contredire cet ancien document MS (2011) , pas seulement sur le numéro de port, mais aussi sur le nom à utiliser:
Pour créer le SPN, vous pouvez utiliser le nom NetBIOS ou le nom de domaine complet (FQDN) de SQL Server. Cependant, vous devez créer un SPN pour le nom NetBIOS et le FQDN .
Lorsque je regarde les SPN qui existent déjà dans mon environnement, je vois une grande variété de combinaisons, certains serveurs ont jusqu'à 4 entrées:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
Même le propre gestionnaire de configuration Kerberos de MS semble vouloir générer les deux dernières versions (avec un obscurcissement approprié):
De même pour les instances nommées existantes, je vois un mélange étrange, certains d'entre eux presque certainement invalides:
MSSQLSvc/sqlbox1:1522
MSSQLSvc/sqlbox1:instance2
MSSQLSvc/sqlbox1.mydomain.org:1522
MSSQLSvc/sqlbox1.mydomain.org:instance2
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org:1522:instance2
Alors, à quoi devraient ressembler mes DSN, pour les instances par défaut et nommées, si j'utilise simplement TCP dans mon environnement?
Dois-je inclure le port ou non? Ou en inclure un avec le port et un sans?
Utilisez le FQDN uniquement, ou ai-je besoin des entrées avec uniquement le nom Netbios? Ou serait-ce seulement si nous utilisions des canaux nommés (ce que nous ne sommes pas)?
(Pour le contexte, nous exécutons SQL 2005 à 2014, certains en cluster, d'autres en mode autonome. La connectivité se fait via TCP uniquement, les canaux nommés sont désactivés dans le gestionnaire de configuration. Nous allons les réparer/créer manuellement au lieu de permettant au compte de service SQL de les créer au démarrage du serveur.)
Si vous utilisez uniquement TCP/IP pour vous connecter à vos instances, vous n'avez que les ports spécifiés. Les noms d'instance sont utilisés lors de la connexion aux instances SQL via les protocoles Named Pipes. Malheureusement, l'article MS ne vient pas directement dire quel format est requis pour quel protocole, mais il est dérivé de (de nombreux tests dans mon environnement) et des éléments suivants Sentence d'article MS :
Pour les canaux nommés et les connexions de 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 le instance par défaut.
En ce qui concerne les noms de domaine complets par rapport aux noms NETBIOS, je recommanderai les noms de domaine complets car ils ne sont pas aussi sujets aux problèmes si vous rencontrez des problèmes de serveur DNS aléatoires.
Tiré de mon article de blog à ce sujet, les formats devraient ressembler à ceci:
La référence source de MS peut être trouvée ici .
Maintenant, faites de votre administrateur réseau (par exemple, la configuration de l'unité d'organisation qui permet l'auto-enregistrement des SPN)
Votre administrateur réseau peut créer une unité d'organisation sur le domaine qui contient tous vos comptes de service SQL Server qui peuvent être configurés de telle manière que le compte de service puisse créer un SPN pour lui-même et lui-même. La méthode suit principalement le blog de Ryan Reis , mais a quelques légers ajustements afin que les sur-subventions ne soient pas effectuées.
Ce processus décrit la création d'une unité d'organisation sur le domaine qui permet aux comptes qu'il contient d'auto-enregistrer leurs propres SPN:
Après avoir suivi les étapes ci-dessus, le conteneur OU en question est maintenant configuré de sorte que tout compte qui lui est ajouté pourra enregistrer et supprimer des SPN pour lui-même et pour lui-même. C'est exactement la bonne quantité d'autorisations car ces comptes ne pourront pas piétiner les SPN enregistrés par d'autres comptes.
Le redémarrage de SQL Server à l'étape 16 a pour but de s'assurer que les SPN sont enregistrés comme prévu. SQL va essayer de supprimer tous les SPN enregistrés à l'arrêt et de les ajouter au démarrage, de sorte que le redémarrage n'est vraiment nécessaire que si aucun SPN n'existe actuellement pour ledit service SQL Server.
La dernière note sur cette approche est que si vous exécutez SQL Server dans une configuration FCI (Failover Clustered Instance) traditionnelle, il n'est PAS recommandé d'ajouter le compte de service de cette instance à cette unité d'organisation, par KB 2443457 .
J'ai vraiment besoin de poster la partie 2 de ma série Kerberos ...
Lorsque le service SQL Server crée SPN, il en crée deux pour chaque instance. C'est le format qu'il utilise.
Instance par défaut:
MSSQLSvc/servername.domain.com
MSSQLSvc/servername.domain.com:1433
Instance nommée:
MSSQLSvc/servername.domain.com:54321
MSSQLSvc/servername.domain.com:instancename
Pour vos instances nommées, si vous créez des SPN manuellement, vous devrez disposer d'un port statique au lieu du port dynamique par défaut.