web-dev-qa-db-fra.com

Aide sur l'erreur SQL Server "Accès ad hoc à OLE DB Provider 'Microsoft.ACE.OLEDB.12.0'"

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 à OLE fournisseur de base de données '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 répertoriant les modifications apportées aux paramètres OPENROWSET, les modifications de 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- refusé /

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?

8
Johnny-boy

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),

enter image description here

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

enter image description here

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

enter image description here

10
NTom
  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.

Autre remarque: vous pouvez copier et coller cela dans un .reg fichier 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.

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.

0
Hoang Tran