SQL Server 2008 problème de connectivité : Impossible de générer un contexte SSPI
Description du problème : Impossible de faire une connexion sur une instance SQL Server 2008 depuis un serveur distant avec un compte Windows. Nous obtenons le message d'erreur : Impossible de générer un contexte SSPI.
Tests réalisés : Nous avons suivi les étapes ci-dessous :
Etape 1: Nous avons exécuté un TELNET sur le machine et le port. Nous avons confirmé que le port SQL était ouvert.
Etape 2: Nous avons vérifié que les SPN pour notre instance SQL Server existe avec la commande ci-dessous :
Démarrer >> Exécuter... >> CMD >> Setspn -L <NomDeVotreCompteDeServicePourSQL>
Registered ServicePrincipalNames for CN=svc-mssql-sgbd,OU=Users,OU=_Paris,DC=puteaux,DC=net:
MSSQLSvc/serverName:PORT
MSSQLSvc/serverName
Etape 3: Depuis le serveur distant, j'ai utilisé un fichier UDL pour réaliser une connexion sans passer par l'application.
Clic droit sur mon bureau >> nouveau fichier >> puis renommer l'extension de votre fichier texte avec le nom suivant : myTest.UDL.
Double cliquer sur le fichier myTest.UDL. Puis sur l'onglet FOURNISSEUR. Et selectionner le provider : SQL Server Native client 10.0
J'ai essayé de faire une connexion avec un autre protocol réseau, comme Name Pipe.
Np:<ServerName>\<IntanceName>
La connexion a fonctionné
Puis j'ai forcé le protocol TCP mais avec une authentification SQL
tcp:<ServerName>\<IntanceName>
La connexion a fonctionné
Puis j'ai essayé toujours avec le protocol TCP mais avec une authentification Windows
tcp:<ServerName>\<IntanceName>
La connexion a échoué avec le mesage : Impossible de générer un contexte SSPI
Puis j'ai re essayé avec le protocol TCP, l'authentification, mais en forçant le port SQL
tcp:<ServerName>\<IntanceName>,PortNumberOfSQL
La connexion a échoué avec le mesage : Impossible de générer un contexte SSPI
Pour terminé, j'ai essayé toujours en TCP mais avec un autre compte Windows
tcp:<ServerName>\<IntanceName>
La connexion a fonctionné
Cause : Nous donc un problème avec les connexions TCP pour un compte Windows précis. Nous avons activé un mode plus verbeux de logs pour capturer les messages kerberos en suivant l'article : https://support.microsoft.com/kb/262177 .
Et nous avons découvert le message d'erreur ci-dessous dans le journal d'événement system :
The kerberos SSPI package generated an output token of size 12536 bytes, which was too large to fit in the token buffer of size 12535 bytes, provided by process id 4.
The output SSPI token being too large is probably the result of the user myUser@myDomain.com being a member of a large number of groups.
It is recommended to minimize the number of groups a user belongs to. If the problem can not be corrected by reduction of the group memberships of this user, please contact your system administrator to increase the maximum token size, which in term is configured machine-wide via the following registry value: HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\MaxTokenSize.
Résolution : Nous avons augmenté la taille du MaxTokenSize pour faire repartir la production. : https://support.microsoft.com/kb/327825 , puis le client a recherché pourquoi cet utilisateur est un membre d'un grand nombre de groupes.
Ressources annexes :
The SQL Network Interface library was unable to register SPN
How to troubleshoot the "Cannot generate SSPI context" error message
“Cannot Generate SSPI Context” error message, more comments for SQL Server
Michel Degremont | Premier Field Engineer - SQL Server Core Engineer |