Vous obtenez des messages d’erreur 7399 et 7300 lorsque vous accédez à un serveur lié

S’applique à : Windows Vista Édition IntégraleWindows Vista Entreprise 64 bitsHyper-V Server 2008

Symptômes


Prenons l’exemple du scénario suivant :
  • Vous avez une instance de SQL Server est installée sur un système qui exécute Windows Vista ou version ultérieure.
  • Sur cette instance de SQL Server, vous configurez un serveur lié à une source de données à l’aide d’un fournisseur OLE DB de la source de données OLEDB.
  • Le fournisseur OLEDB est configuré pour être instanciée en dehors du processus SQL Server. Cela est généralement la valeur par défaut pour la plupart des fournisseurs OLEDB, à l’exception de SQL Native Client. Cela peut être contrôlé par l’option Autoriser inprocess qui peut être définie à l’aide des propriétés du fournisseur dans un Studio de gestion de SQL Server.
  • La sécurité du serveur lié est configurée pour utiliser les effectués à l’aide du contexte de sécurité actuel de la connexion option.
Dans ce scénario, si les journaux des utilisateurs sans privilèges dans le SQL Server instance à l’aide de l’authentification Windows et essayez d’accéder au serveur lié, ils seront rencontrer un message d’erreur semblable au suivant :
Msg 7399, niveau 16, état 1, ligne 1 fournisseur OLE DB < nom du fournisseur OLEDB > pour le serveur lié < nom du serveur lié > a signalé une erreur. Le fournisseur n’a pas donné d’informations sur l’erreur. Msg 7330, niveau 16, état 2, ligne 1Cannot d’extraire une ligne du fournisseur OLE DB < nom du fournisseur OLEDB > pour le serveur lié.
Remarque : Dans ce contexte un utilisateur non privilégié est un utilisateur standard qui n’appartient pas à un groupe d’accès privilégié au niveau de Windows (par exemple : les administrateurs)

Cause


Lorsqu’un fournisseur OLE DB est exécuté en dehors du processus, la Dll de communication à distance de la Interface dans OLE DB (msdaps.dll) gère la communication entre le proxy côté processus, dans lequel se trouve par consommateur OLE DB et de stub côté, dans lequel se trouve le fournisseur OLE DB. Dans l’implémentation actuelle. OLE DB Remoting utilise les objets de mappage de fichier nommé pour transmettre des données de jeu de lignes OLE DB. Sur les systèmes exécutant Vista ou une version ultérieure du système d’exploitation, le proxy et le stub sont exécutés dans différentes sessions en raison de l’isolation de la Session 0 et par conséquent OLE DB Remoting doit utiliser global pour la communication de proxy-stub sur ces systèmes. Toutefois, étant donné que le compte d’utilisateur n’a pas de privilèges suffisants pour créer un objet de mappage de fichier global dans la configuration du serveur lié spécifié, la communication de proxy-stub ne peut pas être exécutée par générant des messages d’erreur décrits dans la section Symptômes section de cet article.

Solution de contournement


Vous pouvez contourner le problème en utilisant l’une des méthodes suivantes :solution de contournement 1: configurer le fournisseur OLEDB pour s’exécuter in-process. Remarque : Vous ne pouvez pas utiliser cette solution de contournement pour les fournisseurs OLEDB qui sont basés sur les versions de .net qui sont antérieures à la version 4.0. Solution 2: affecter aux utilisateurs le droit d’utilisateur « Créer des objets globaux ». Pour ce faire, procédez comme suit :
  1. Cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Stratégie de sécurité locale.
  2. Développez Stratégies locales, puis cliquez sur Attribution des droits utilisateur.
  3. Dans le volet droit, double-cliquez sur créer des objets globaux.
  4. Dans la boîte de dialogue Paramètre de stratégie de sécurité locale , cliquez sur Ajouter.
  5. Dans la boîte de dialogue Sélectionner les utilisateurs ou un groupe , cliquez sur les comptes d’utilisateurs que vous souhaitez ajouter et cliquez sur Ajouter, puis cliquez sur OK.
  6. Cliquez sur OK.
État: Microsoft travaille actuellement sur ce problème est corrigé dans une prochaine version du produit.