Aide sur l'erreur SQL Server «Accès ad hoc au fournisseur OLE DB« Microsoft.ACE.OLEDB.12.0 »»

8

Nous avons donc un problème intéressant où les utilisateurs reçoivent l'erreur suivante lorsqu'ils tentent d'interroger une vue dans SQL Server 2008 R2:

Msg 7415, niveau 16, état 1, ligne 1 L'accès ad hoc au fournisseur OLE DB «Microsoft.ACE.OLEDB.12.0» a été refusé. Vous devez accéder à ce fournisseur via un serveur lié.

En recherchant le problème, j'ai trouvé plus de quelques articles énumérant les modifications apportées aux paramètres OPENROWSET, les modifications de la valeur de registre, les requêtes AdHoc DIstributed, etc. (Liens vers les articles ci-dessous)

http://www.johnsoer.com/blog/?p=538

http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/

Nous recevons toujours l'erreur après avoir suivi les étapes des liens ci-dessus.

La mise en garde ici est que lorsque nous avons créé un compte de test et lui avons donné sa - cela fonctionnait très bien. Mes collègues disposant d'un accès administrateur peuvent également exécuter la requête sans aucun problème.

Cette requête est alimentée à partir d'un fichier Excel local vers le serveur hébergeant cette instance.

Quelqu'un connaît-il d'autres correctifs pour 2008?

Johnny-boy
la source

Réponses:

10

Je viens d'avoir le même problème hier, et voici comment j'ai pu le résoudre:

Bien que «Interdire l'accès ad hoc» ne soit pas activé sur la page Options du fournisseur (SQL Server Management Studio),

entrez la description de l'image ici

le Registre n'a pas la clé DisallowadHocAccess = 0, et pour une raison quelconque, il est nécessaire de l'avoir là.

entrez la description de l'image ici

Après avoir ajouté la clé au registre, j'ai également pu exécuter la requête avec un utilisateur non administrateur.

entrez la description de l'image ici

NTom
la source
8
  1. Déterminez si «Interdire l'accès ad hoc» est activé pour votre fournisseur. Vous pouvez le trouver dans SQL Management Studio via le chemin de navigation suivant:

  2. Objets serveur / Serveurs liés / Fournisseurs / Microsoft.ACE.OLEDB.12.0

  3. Cliquez avec le bouton droit sur le fournisseur "Microsoft.ACE.OLEDB.12.0" et sélectionnez "Propriétés" dans le menu contextuel.

  4. Dans la fenêtre contextuelle, assurez-vous que la case à cocher "Interdire l'accès ad hoc" est désactivée.

Alternativement, vous pouvez simplement le désactiver en utilisant le SQL suivant:

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

Ensuite, vérifiez que la clé de Registre est définie. Dans Regedit, naviguez comme suit:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQLServer\MSSQL<major version>_<minor version>.<instance name>\Providers\Microsoft.ACE.OLEDB.12.0]
"DisallowAdhocAccess"=dword:00000000

Remarque: Vous ne pouvez pas avoir de nom d'instance si vous utilisez l'instance par défaut.

Une autre note: vous pouvez copier et coller cela dans un .regfichier pour définir la clé.

Point clé : D'après mon expérience, vous n'avez besoin de la clé de registre que si l'utilisateur accédant à la base de données n'est pas un utilisateur de type administrateur ou propriétaire. Les environnements de haute sécurité auront donc besoin de cette clé de registre.

Slogmeister Extraordinaire
la source
J'ai posté cette réponse parce que l'autre réponse avait des images que je ne pouvais pas voir car elles sont bloquées sur mon lieu de travail. Veuillez ne pas utiliser d'images sauf si vous en avez absolument besoin!
Slogmeister Extraordinaire
L'ajout de la clé de registre a fonctionné pour moi; via l'interface graphique, non.
Tim
0

Pour moi, assurez-vous que vous disposez d'une clé de registre nommée "DisallowAdhocAccess" = 0 dans [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0] Si elle n'existe pas, créez-la.

Hoang Tran
la source