CORRECTIF : Vous recevez un message d’erreur « Impossible de générer le contexte SSPI » lorsque vous essayez de vous connecter à un serveur SQL Server 2000 SP3


Résumé


Lorsque vous essayez de vous connecter à un serveur Microsoft SQL Server 2000 Service Pack 3 (SP3) à partir d’un ordinateur client, la connexion échoue avec un message d’erreur si le nom du serveur ne peut pas être résolu à partir de l’adresse IP (Internet Protocol). Ce problème se produit car SQLOLEDB n’interprète pas correctement la valeur de retour de la fonction ConnectionGetSvrUser de dbnetlib.
  • Un correctif résout ce problème.
  • Pour contourner ce problème, vous devez créer manuellement une entrée d’hôte pour l’adresse IP de l’ordinateur client.
  • Pour reproduire le problème, créer et configurer l’adresse IP dynamique du serveur puis se connecter à l’ordinateur serveur à l’aide de l’Analyseur de requêtes SQL ou de la visionneuse de jeu de lignes à partir d’un ordinateur client.

Symptômes


Lorsque vous tentez de connecter un ordinateur client à un serveur Microsoft SQL Server 2000 SP3, le nom du serveur ne peut pas être résolu à partir de l’adresse IP (Internet Protocol) et la connexion échoue.

Lorsque vous vous connectez à l’ordinateur du serveur SQL Server 2000 SP3 avec l’Analyseur de requêtes SQL, le message d’erreur suivant s’affiche :
Serveur : Msg 11004, niveau 16, état 1
[Microsoft] [Pilote de ODBC SQL Server] Impossible de générer le contexte SSPI
Lorsque vous utilisez le SQL Server OLE DB fournisseur (SQLOLEDB) pour vous connecter à un serveur SQL Server 2000 à l’aide de la visionneuse de jeu de lignes, le message d’erreur suivant s’affiche :
Source : « fournisseur Microsoft OLE DB pour SQL Server »

Interface : IID_IDBInitialize
Résultat : 0 x 80004005 lors = E_FAIL

ISQLErrorInfo : [HY000] [0x00002afc]
IErrorInfo : [0x00002afc] « Impossible de générer le contexte SSPI »

Fichier : D:\MDACTools\rowsetviewer\CBase.cpp
Ligne : 1067

Cause


Lorsque SQLOLEDB appelle la fonction ConnectionGetSvrUser de la bibliothèque dbnetlib, il interprète à tort que cette fonction retourne une valeur booléenne. La fonction ConnectionGetSvrUser est conçue pour retourner un void. Par conséquent, tout ce qui se trouve dans le registre EAX devient la valeur de retour.


La fonction ConnectionGetSvrUser appelle en interne la fonction gethostbyaddr . La fonction gethostbyaddr Obtient le nom d’hôte qui correspond à une adresse IP particulière. Si la fonction gethostbyaddr échoue, il renvoie un caractère zéro pour le registre EAX. Par conséquent, la fonction ConnectionGetSvrUser retourne la valeur FALSE . Ce comportement provoque un échec de connexion à l’ordinateur du serveur SQL Server 2000 SP3.


Résolution


Un correctif pris en charge est disponible auprès de Microsoft. Toutefois, ce correctif vise à corriger uniquement le problème décrit dans cet article. Appliquez ce correctif uniquement aux systèmes rencontrant ce problème spécifique.

Si le correctif est disponible pour le téléchargement, il existe une section « Téléchargement de correctif logiciel disponible » au début de cet article de la Base de connaissances. Si cette section n’apparaît pas, soumettez une demande au Service Clients et Support de Microsoft pour obtenir le correctif.

Remarque Si des problèmes supplémentaires se produisent ou si des procédures de dépannage sont nécessaires, vous devrez peut-être formuler une demande de service distincte. Les coûts habituels du support technique s'appliqueront aux questions et problèmes qui ne relèvent pas de ce correctif logiciel. Pour une liste complète des numéros de téléphone service clientèle de Microsoft ou pour créer une demande de service distincte, visitez le site Web de Microsoft à l’adresse suivante :Remarque Le formulaire « Téléchargement de correctif logiciel disponible » affiche les langues pour lesquelles le correctif est disponible. Si vous ne voyez pas votre langue, c'est parce qu'il n'y a pas de correctif disponible pour cette langue. Version l’anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont répertoriés dans le temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, elles sont converties en heure locale. Pour trouver la différence entre l’UTC et l’heure locale, utilisez l’onglet fuseau horaire dans l’outil Date et heure dans le panneau de configuration.

Date Time Version Size File name
--------------------------------------------------------------

15-Jun-2004 00:22 2000.85.1045.0 28,672 Dbnmpntw.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msadds.dll
15-Jun-2004 00:21 2.80.1045.0 512,000 Msado15.dll
15-Jun-2004 00:21 2.80.1045.0 163,840 Msadomd.dll
15-Jun-2004 00:21 2.80.1045.0 184,320 Msadox.dll
15-Jun-2004 00:21 2.80.1045.0 53,248 Msadrh15.dll
15-Jun-2004 00:21 2.80.1045.0 225,280 Msdaora.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msdart.dll
15-Jun-2004 00:21 2.575.1045.0 139,264 Msorcl32.dll
15-Jun-2004 00:21 3.525.1045.0 221,184 Odbc32.dll
15-Jun-2004 00:22 2000.85.1045.0 24,576 Odbcbcp.dll
15-Jun-2004 00:21 2.80.1045.0 442,368 Oledb32.dll
15-Jun-2004 00:21 2000.85.1045.0 503,808 Sqloledb.dll
15-Jun-2004 00:21 2000.85.1045.0 401,408 Sqlsrv32.dll
15-Jun-2004 00:08 2000.85.1045.0 208,896 Sqlxmlx.dll

Solution de contournement


Pour contourner ce problème, vous devez créer manuellement une entrée d’hôte sur l’ordinateur client pour l’adresse IP que vous souhaitez vous connecter.
  1. Démarrez l’Explorateur Windows.
  2. Recherchez le fichier Hosts et puis ouvrez le fichier dans le bloc-notes.

    Remarque : Vous pouvez localiser le fichier dans le chemin d’accès %SystemRoot%\System32\Drivers\Etc.
  3. À la fin du fichier, ajoutez ce qui suit :
    IP aléatoire Nom de l’ordinateur

    Remarque : IP aléatoire est un espace réservé pour l’adresse IP qui n’est pas en cours d’utilisation par un autre ordinateur du réseau. Nom de l’ordinateur est un espace réservé pour le nom de l’ordinateur sur lequel le s’exécute sur SQL Server 2000 SP3. L’adresse IP aléatoire IP et le nom du Nom de l’ordinateur doivent être séparés au moins un espace.
  4. Dans le menu fichier, cliquez sur Enregistrer.
  5. Fermez le fichier.

État


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations


Procédure pour reproduire le problème

Configurer l’adresse IP dynamique

  1. Ouvrez une session en tant qu’administrateur sur l’ordinateur qui exécute SQL Server 2000 SP3.
  2. Dans le panneau de configuration, double-cliquez sur Connexions réseau.
  3. Double-cliquez sur la connexion au réseau local que vous souhaitez modifier.
  4. Dans la boîte de dialogue État de la connexion réseau Local , cliquez sur Propriétés. La boîte de dialogue Propriétés de connexion au réseau Local s’affiche.
  5. Dans la zone cette connexion utilise les éléments suivants , cliquez sur Protocole Internet (TCP/IP), puis cliquez sur Propriétés. La boîte de dialogue Propriétés de protocole Internet (TCP/IP) s’affiche.
  6. Cliquez sur obtenir une adresse IP automatiquement, puis cliquez sur OK.
  7. Dans la boîte de dialogue Propriétés de connexion au réseau Local , cliquez sur Fermer.

  8. Dans la boîte de dialogue État de la connexion réseau Local , cliquez sur Fermer.
  9. Cliquez sur Démarrer, sur exécuter, tapez cmd, puis cliquez sur OK.
  10. À l’invite de commandes, tapez ping Nom d’ordinateuret appuyez sur ENTRÉE.

    Remarque : Nom de l’ordinateur est un espace réservé pour le nom de l’ordinateur qui exécute SQL Server 2003

    Vous recevez un message d’erreur semblable au suivant :
    Test ping du Nom de l’ordinateur [IP dynamique] avec 32 octets de données :

    Réponse de IP dynamique: octets = 32 temps < 1 ms TTL = 128
    Réponse de IP dynamique: octets = 32 temps < 1 ms TTL = 128
    Réponse de IP dynamique: octets = 32 temps < 1 ms TTL = 128

    Statistiques ping pour IP dynamique:
    Paquets : Envoyés = 4, reçus = 4, perdus = 0 (perte 0 %),
    Approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, moyenne = 0ms
    Remarque : IP dynamique est un espace réservé pour l’adresse IP dynamique l’ordinateur Nom de l’ordinateur .
  11. Pour quitter l’invite de commandes, tapez exitet appuyez sur ENTRÉE.
  12. Répétez les étapes c à e. Cliquez sur utiliser l’adresse IP suivante.
  13. Dans la zone adresse IP , tapez l’adresse IP dynamique .

    Remarque : IP dynamique est un espace réservé pour l’adresse IP dynamique l’ordinateur Nom de l’ordinateur .
  14. Dans la zone masque de sous-réseau , tapez le masque de sous-réseau pour votre réseau.
  15. Dans la zone passerelle par défaut , tapez l’adresse IP de l’ordinateur ou du périphérique sur votre réseau qui se connecte à votre réseau à un autre réseau ou à Internet.
  16. Dans la zone serveur DNS préféré , tapez l’adresse IP de l’ordinateur qui résout les noms d’hôtes en adresses IP.
  17. Dans la zone serveur DNS auxiliaire , tapez l’adresse IP de l’ordinateur DNS que vous voulez utiliser si le serveur DNS (Domain Name System) préféré devient indisponible.
  18. Cliquez sur Avancé. Les Paramètres TCP/IP avancés s’affiche.
  19. Sous adresses IP, cliquez sur Ajouter. La boîte de dialogue Adresse TCP/IP s’affiche.
  20. Dans la zone adresse IP , tapez l’adresse IP aléatoire .

    Remarque : IP aléatoire est un espace réservé pour l’adresse IP qui n’est pas en cours d’utilisation par un autre ordinateur du réseau.
  21. Dans la zone masque de sous-réseau , tapez le masque de sous-réseau pour votre réseau, puis cliquez sur Ajouter.
  22. Dans la zone Paramètres TCP/IP avancés, cliquez sur OK.
  23. Dans les Propriétés du protocole Internet (TCP/IP) , cliquez sur OK. Dans la boîte de dialogue Propriétés de connexion au réseau Local , cliquez sur Fermer. Dans la boîte de dialogue État de la connexion réseau Local , cliquez sur Fermer.

Se connecter à l’ordinateur du serveur SQL Server 2000 SP3 à partir d’un ordinateur client par le biais de l’Analyseur de requêtes SQL

  1. Démarrez l’Analyseur de requêtes SQL. La boîte de dialogue se connecter à SQL Server s’affiche.
  2. Dans la zone SQL Server , tapez IP aléatoire.

    Remarque : IP aléatoire est un espace réservé pour l’adresse IP qui n’est pas en cours d’utilisation par un autre ordinateur du réseau.
  3. Sous se connecter en utilisant, cliquez sur authentification Windows.
  4. Cliquez sur OK. Vous remarquez le message d’erreur qui est mentionné dans la section « Symptômes ».

Se connecter à l’ordinateur du serveur SQL Server 2000 SP3 à partir d’un ordinateur client par l’intermédiaire de la visionneuse de jeu de lignes

  1. Démarrez la visionneuse de jeu de lignes. La fenêtre de Microsoft OLE DB RowsetViewer s’affiche.
  2. Dans le menu fichier , cliquez sur La connexion complète. La boîte de dialogue Complète Connect - aucune Description disponible s’affiche.
  3. Dans la liste fournisseur , sous connexioncliquez sur SQLOLEDB .
  4. Dans la zone source de données , tapez IP aléatoire sous la Source.

    Remarque : IP aléatoire est un espace réservé pour l’adresse IP qui n’est pas en cours d’utilisation par un autre ordinateur du réseau.
  5. Sous connexion, cliquez sur DBPROMPT_NOPROMPT ne dans la liste d’invite .
  6. Dans l’onglet Propriétés , cliquez sur Avancé. La boîte de dialogue de IDBProperties::SetProperties s’affiche.
  7. Activez la case à cocher DBPROP_AUTH_INTEGRATED , puis cliquez sur OK.
  8. Dans la boîte de dialogue Complète Connect - aucune Description disponible , cliquez sur OK. Vous remarquez le message d’erreur qui est mentionné dans la section « Symptômes ».
Remarque L’ordinateur client et le serveur SQL Server 2000 Service Pack 3 doivent être dans le même domaine. Lorsque vous essayez de vous connecter à l’ordinateur du serveur SQL Server 2000 SP3 avec IP aléatoire à partir de l’ordinateur, il se connecte à l’ordinateur du serveur SQL Server 2000 Service Pack 3 sans erreur.

Références


Pour plus d'informations, visitez les sites Web de Microsoft Developer Network (MSDN) suivant :
Vue d’ensemble des outils de Test OLE DB
http://msdn2.microsoft.com/en-us/library/ms721219.aspx
Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

323444 comment modifier l’adresse IP d’une carte réseau dans Windows Server 2003

Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft