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
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?
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),
le Registre n'a pas la clé DisallowadHocAccess = 0, et pour une raison quelconque, il est nécessaire de l'avoir là.
Après avoir ajouté la clé au registre, j'ai également pu exécuter la requête avec un utilisateur non administrateur.
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:
Objets serveur/Serveurs liés/Fournisseurs/Microsoft.ACE.OLEDB.12.0
Cliquez avec le bouton droit sur le fournisseur "Microsoft.ACE.OLEDB.12.0" et sélectionnez "Propriétés" dans le menu contextuel.
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.