Академический Документы
Профессиональный Документы
Культура Документы
Cet article explique étape par étape comment résoudre les causes les plus courantes du message
d'erreur "Impossible de générer un contexte SSPI". Ce message d'erreur peut s'afficher dans les
conditions suivantes :
Retour au début
2
Le pilote SQL Server sur un ordinateur client utilise la sécurité intégrée pour utiliser le jeton de sécurité
Windows du compte utilisateur afin de se connecter à un ordinateur qui exécute SQL Server. Le jeton de
sécurité Windows est délégué à partir du client vers l'ordinateur qui exécute SQL Server. Le pilote SQL
Server effectue cette délégation lorsque le jeton de sécurité de l'utilisateur est délégué à partir d'un
au ºTLM sur Canaux nommés (sans utiliser l'interface SSPI [Security Support Provider
Interface])
L'interface SSPI est un ensemble d'API Windows qui permet la délégation et l'authentification mutuelle
sur n'importe quelle couche de transport de données générique, telle que les sockets TCP/IP. Par
conséquent, elle permet à un ordinateur qui exécute un système d'exploitation Windows de déléguer un
jeton de sécurité d'utilisateur en toute sécurité à partir d'un ordinateur vers un autre sur n'importe quelle
L'erreur "Impossible de générer un contexte SSPI" est générée lorsque l'interface SSPI utilise Kerberos
pour la délégation sur TCP/IP et que Kerberos ne peut pas effectuer les opérations nécessaires pour
assurer la délégation du jeton de sécurité de l'utilisateur vers l'ordinateur de destination qui exécute SQL
Server.
r
r
Kerberos utilise un identificateur appelé "ºom principal de service". Considérez un nom principal de
service comme un identificateur unique de domaine ou de forêt de quelque instance dans une ressource
de serveur réseau. ous pouvez avoir un nom principal de service pour un service Web, pour un service
SQL ou pour un service SMTP. ous pouvez également avoir plusieurs instances de services Web sur le
c
Un nom principal de service pour SQL Server est composé des éléments suivants :
SQL Server.
au Î e : Il s'agit du nom de domaine complet DºS de l'ordinateur qui exécute SQL Server.
Par exemple, un nom principal de service typique pour un ordinateur qui exécute SQL Server est :
Ñ
Lorsque le pilote SQL Server sur un client utilise la sécurité intégrée pour se connecter à SQL Server, le
code du pilote sur le client essaie de résoudre le nom DºS complet de l'ordinateur qui exécute SQL
Server en utilisant les API de mise en réseau WinSock. Pour effectuer cette opération, le code du pilote
appelle les API WinSock et . Même si une adresse IP ou un nom d'hôte
est passé comme le nom de l'ordinateur qui exécute SQL Server, le pilote SQL Server essaie de résoudre
Lorsque le pilote SQL Server sur le client résout le nom DºS complet de l'ordinateur qui exécute SQL
Server, le service DºS correspondant est utilisé pour former le nom principal de service pour cet
ordinateur. Par conséquent, tout problème relatif à la façon dont l'adresse IP ou le nom d'hôte est résolu
sur le nom DºS complet par WinSock peut provoquer la création d'un nom principal de service incorrect
par le pilote SQL Server pour l'ordinateur qui exécute SQL Server.
Par exemple, les noms principaux de service incorrects que le pilote SQL Server côté client peut former
au MSSQLSvc/SQLSERER1:1433
au MSSQLSvc/123.123.123.123:1433
au MSSQLSvc/SQLSERER1.antartica.corp.mycompany.com:1433
au MSSQLSvc/SQLSERER1.dns.northamerica.corp.mycompany.com:1433
Lorsque le pilote SQL Server forme un nom principal de service incorrect, l'authentification peut
continuer à fonctionner car l'interface SSPI essaie de chercher dans Active Directory et ne trouve pas le
nom principal de service. Si le nom principal de service est introuvable, l'authentification Kerberos n'est
L'authentification ºTLM (qui ne repose pas sur le nom principal de service) réussit tant que le client
c
Le facteur clé de la réussite de l'authentification Kerberos est la fonctionnalité DºS correcte sur le
réseau. ous pouvez vérifier cette fonctionnalité sur le client et le serveur en utilisant l'utilitaire de ligne
de commande r . Sur l'ordinateur client, exécutez la commande suivante pour obtenir l'adresse IP du
serveur qui exécute SQL Server (où le nom de l'ordinateur qui exécute SQL Server est SQLServer1) :
sqlserver1
Pour savoir si l'utilitaire de ligne de commande résout le nom DºS complet de SQLServer1,
D resse Ir
Par exemple :
2
!"#$%
&$
"#'( )#**' +
&$
"#'( )#**' +
&$
"#'( )#**' +
&$
"#'( )#**' +
###$
,# '-%'-#').)/&##0-
1
2
3%
#&&4#%#
Ñ3')#-Ñ23')#-1
')#
24
!"#
$%
&$
"#'( )#**' +
&$
"#'( )#**' +
&$
"#'( )#**' +
&$
"#'( )#**' +
###$
,# '-%'-#').)/&##0-
1
2
3%
#&&4#%#
Ñ3')#-Ñ23')#-1
')#
2
c
Lorsque
D resse Ir résout le nom DºS complet correct de l'ordinateur qui exécute SQL Server, la
Retour au début
2
!
Il s'agit de l'une des parties cruciales de l'interaction de Kerberos et de SQL Server. Avec SQL Server,
vous pouvez exécuter le service SQL Server sous : un compte LocalSystem, un compte d'utilisateur local
à partir d'un autre ordinateur ou un compte d'utilisateur de domaine. Lorsque l'ordinateur qui exécute
SQL Server démarre, il essaie d'enregistrer son propre nom principal de service dans Active Directory en
utilisant l'appel d'API "# . Si l'appel échoue, l'avertissement suivant est enregistré
Source : MSSQLServer EventID : 19011 Description : SuperSocket info : (SpnRegister) : Erreur 8344.
Pour plus d'informations sur la fonction "# , reportez-vous au site Web de Microsoft
DsWriteAccountSpn
$
Si vous exécutez le service SQL Server sous le compte LocalSystem, le nom principal de service est
généralement enregistré et Kerberos interagit correctement avec l'ordinateur qui exécute SQL Server.
Cependant, si vous exécutez le service SQL Server sous un compte de domaine ou un compte local,
généralement, la tentative de création du nom principal de service peut échouer. Lorsque la création du
nom principal de service échoue, cela signifie qu'aucun nom principal de service n'est configuré pour
l'ordinateur qui exécute SQL Server. Si vous testez l'utilisation d'un compte d'administrateur de domaine
en tant que compte du service SQL Server, le nom principal de service est correctement créé car les
informations d'authentification au niveau de l'administrateur système que vous devez avoir pour créer un
nom principal de service sont présentes. Parce qu'il se peut que vous n'utilisiez pas un compte
d'administrateur de domaine pour exécuter le service SQL Server (pour empêcher tout risque lié à la
sécurité), l'ordinateur qui exécute SQL Server ne peut pas créer son propre nom principal de service. Par
conséquent, vous devez créer un nom principal de service manuellement pour votre serveur SQL Server
Retour au début
%
érifiez que le domaine sur lequel vous ouvrez une session peut communiquer avec le domaine auquel
appartient l'ordinateur qui exécute SQL Server. Il faut également que la résolution de nom fonctionne
c
1.u Si votre domaine d'ouverture de session est le même que celui auquel appartient
l'ordinateur qui exécute SQL Server, utilisez l'authentification Windows pour ouvrir une
session sur SQL Server. Si l'authentification échoue, vous devez résoudre un problème
2.u Si votre domaine d'ouverture de session est différent du domaine de l'ordinateur qui exécute
3.u érifiez si le domaine auquel appartient le serveur et le compte de domaine que vous utilisez
pour vous connecter sont dans la même forêt ou non. Cette condition est requise pour que
l'interface SSPI fonctionne. Pour plus d'informations, cliquez sur le numéro ci-dessous pour
274438 Impossible d'utiliser les relations d'approbation Kerberos entre deux forêts dans
Windows 2000
5.u Utilisez l'utilitaire Manipuler les noms principaux de service pour les comptes (SetSPº.exe)
Windows 2000 peuvent utiliser l'utilitaire pour contrôler le nom principal de service qui est
attribué à un service et à un compte. Si vous démarrez SQL Server alors que vous avez
ouvert une session avec le compte LocalSystem, le nom principal de service est
démarrer SQL Server ou dès que vous changez le compte qui est utilisé pour démarrer SQL
Server, vous devez exécuter SetSPº.exe pour supprimer les noms principaux de service
expirés, puis vous devez ajouter un nom principal de service valide. Pour plus
documentation en ligne de SQL Server 2000. Pour cela, visitez le site Web de Microsoft (en
Pour plus d'informations sur les Kits de ressources Windows 2000, reportez-vous au site
6.u érifiez que la résolution de nom fonctionne correctement. Les méthodes de résolution de
nom peuvent inclure les fichiers DºS, WIºS, HOSTS et les fichiers LMHOSTS. Pour plus
c
d'informations sur les problèmes de résolution de nom et leur dépannage, cliquez sur le
Microsoft :
7.u Pour plus d'informations sur la résolution des problèmes d'accessibilité et de pare-feu avec
Active Directory, cliquez sur les numéros ci-dessous pour afficher les articles correspondants
Retour au début
%
érifiez certains paramètres de base sur l'ordinateur sur lequel SQL Server est installé :
1.u Kerberos n'est pas pris en charge sur les ordinateurs Windows 2000 qui exécutent Windows
Clustering à moins que vous ayez appliqué le Service Pack 3 (ou version ultérieure) à
Windows 2000. Par conséquent, toute tentative d'utilisation de l'authentification SSPI sur
une instance en cluster de SQL Server peut échouer. Pour plus d'informations sur la prise en
charge de Kerberos sur les clusters de serveurs Windows 2000, cliquez sur le numéro ci-
235529 Prise en charge de Kerberos sur les clusters de serveurs Windows 2000
2.u érifiez que le serveur exécute le Service Pack 1 Windows 2000. Pour plus d'informations
sur la prise en charge de Kerberos sur les serveurs Windows 2000, cliquez sur le numéro ci-
3.u Sur un cluster, si le compte que vous utilisez pour démarrer SQL Server, l'Agent SQL Server
ou les services de recherche en texte intégral change, si par exemple il utilise un nouveau
mot de passe, suivez les étapes fournies dans l'article suivant dans la Base de connaissances
Microsoft :
239885 IºF : Comment modifier des comptes de service sur un serveur virtuel SQL
c
4.u érifiez si le compte que vous utilisez pour démarrer SQL Server dispose des droits
appropriés. Si vous utilisez un compte qui n'est pas membre du groupe Administrateurs
documentation en ligne de SQL Server pour vous procurer une liste détaillée des droits dont
Retour au début
%
1.u érifiez que le fournisseur de support de sécurité ºTLM est correctement installé et activé
sur le client. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article
2.u Déterminez si vous utilisez des informations d'authentification cachées. Si vous avez ouvert
une session sur le client avec des informations d'authentification cachées, fermez votre
session sur l'ordinateur puis rouvrez-la quand vous pourrez vous connecter à un contrôleur
242356 L'utilisateur ne reçoit pas d'alerte lors de l'ouverture de session avec des
3.u érifiez que les dates sur le client et le serveur sont correctes. Si les dates sont trop
4.u SSPI utilise un fichier nommé Security.dll. Si une autre application installe un fichier avec ce
253577 PROBLÈME : Erreur : 80004005 - Le pilote MS ODBC SQL Server ne peut pas
5.u Si le système d'exploitation sur le client est Microsoft Windows 98, vous devez installer le
c
267550 BOGUE : "Échec d'assertion" lors de la connexion à SQL Server via le protocole
TCP/IP
Retour au début
%
L'utilitaire réseau du client est fourni avec Microsoft Data Access Components (MDAC) et il est utilisé
pour configurer la connectivité sur les ordinateurs qui exécutent SQL Server. ous pouvez utiliser
1.u Sous l'onglet w , la façon dont les protocoles sont définis varie selon la version de
MDAC. Avec les versions antérieures de MDAC, vous pouvez sélectionner un protocole par
"défaut". Sur les dernières versions de MDAC, vous pouvez activer un ou plusieurs
protocoles avec un protocole en tête de liste lorsque vous vous connectez à SQL Server.
Parce que SSPI s'applique uniquement au protocole TCP/IP, vous pouvez utiliser un
protocole différent, tel que les Canaux nommés, pour éviter cette erreur.
2.u Consultez l'onglet dans l'utilitaire réseau du client pour vérifier si un alias a été défini
pour le serveur auquel vous essayez de vous connecter. Si un alias de serveur a été défini,
vérifiez les paramètres pour savoir comment cet ordinateur est configuré pour se connecter
à SQL Server. ous pouvez vérifier cela en supprimant le serveur d'alias pour voir si le
comportement change.
3.u Si le serveur d'alias n'est pas défini sur l'utilitaire réseau du client, ajoutez l'alias pour le
serveur auquel vous vous connectez. Lorsque vous effectuez cette tâche, vous définissez
port.
Retour au début
&
Si vous ne trouvez pas la cause du problème en utilisant les étapes de résolution de cet article,
Pour obtenir une liste complète des numéros de téléphone des services de Support technique Microsoft,
ainsi que des informations relatives aux frais de support technique, reportez-vous au site Web de
http://support.microsoft.com/default.aspx?scid=fh;[Lº];CºTACTMS
1.u Générez un rapport sqldiag à partir de SQL Server. Pour plus d'informations, consultez la
c
3.u Sur le noeud qui ne peut pas se connecter à SQL Server, tapez la commande suivante à
'
(
Cette commande génère un fichier nommé Started.txt dans le répertoire dans lequel vous
exécutez la commande.
4.u Enregistrez les valeurs pour la clé de Registre sous la clé de Registre suivante sur
l'ordinateur client :
HKEY_LOCAL_MACHIºE\SOFTWARE\MICROSOFT\MSSQLSERER\CLIEºT\COººECTTO
HKEY_LOCAL_MACHIºE\SYSTEM\CurrentControlSet\Control\LSA\LMCompatibilityLevel
6.u Dans un environnement en cluster, vérifiez l'existence de la clé de Registre suivante pour
HKEY_LOCAL_MACHIºE\SYSTEM\CurrentControlSet\Services\ºTLMSsp
7.u Capturez les résultats si vous vous connectez à SQL Server en utilisant un nom UºC (ou le
8.u Capturez les résultats si vous exécutez la commande ping sur le nom d'ordinateur (ou le
9.u Enregistrez le nom des comptes d'utilisateur que vous utilisez pour démarrer chacun des
10.u Le professionnel du support doit savoir si SQL Server est configuré pour l'authentification
11.u oyez si vous pouvez connecter votre ordinateur qui exécute SQL Server à partir du même
12.u oyez si vous pouvez vous connecter en utilisant le protocole Canaux nommés.
Retour au début
2
!
c
L'interface SSPI est l'interface de sécurité de Microsoft Windows ºT qui est utilisée pour l'authentification
L'authentification survient au niveau du système d'exploitation lorsque vous ouvrez une session sur un
domaine Windows. L'authentification Kerberos est uniquement disponible sur les ordinateurs
Windows 2000 sur lesquels Kerberos est activé et qui utilisent Active Directory.
SSPI est uniquement utilisée pour les connexions TCP/IP qui sont établies en utilisant l'authentification
intégrée.) SSPI n'est pas utilisée par les Canaux nommés ni par les connexions multiprotocoles. Par
conséquent, vous pouvez éviter le problème en configurant vos clients pour qu'ils se connectent à partir
Lorsqu'un client SQL Server essaie d'utiliser la sécurité intégrée sur des sockets TCP/IP vers un
ordinateur distant qui exécute SQL Server, la bibliothèque réseau du client SQL Server utilise l'API SSPI
pour effectuer la délégation de sécurité. Le client réseau SQL Server (Dbnetlib.dll) émet un appel vers la
fonction 2 ) et passe à "négocier" pour le paramètre szrackage. Ceci indique
négocier signifie qu'il faut essayer l'authentification Kerberos ou ºTLM sur les ordinateurs Windows. En
d'autres termes, Windows utilise la délégation Kerberos si l'ordinateur de destination qui exécute SQL
Server a un nom principal de service associé, correctement configuré. Sinon, Windows utilise la
délégation ºTLM.
G érifiez que vous n'utilisez pas un compte nommé "SYSTEM" pour démarrer les services SQL
Server (MSSQLServer, SQLServerAgent, MSSearch). Le mot clé SYSTEM peut entraîner des conflits avec
Retour au début
Références
Pour plus d'informations sur le fonctionnement de la sécurité Kerberos et SSPI, cliquez sur les numéros
ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
304161 L'authentification mutuelle SSPI est indiquée côté client mais pas côté serveur
277658 PROBLÈME : Échec de Setspn si le nom de domaine diffère du nom ºetBIOS où le nom principal
c
244474 Obligation pour Kerberos d'utiliser TCP au lieu de UDP dans Windows 2000
326985 COMMEºT FAIRE : Résoudre les problèmes liés à Kerberos dans les services IIS
Pour consulter un livre blanc (en anglais) relatif à la sécurité Microsoft SQL Server 2000, reportez-vous
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql2k/html/sql_security2000.asp
Retour au début