2010-08-02 8 views
4

J'utilise des requêtes de distribution AD Hoc pour transférer des données de MS SQL Server 2008 à MS Access. Le processus est commencé à utiliser une seule instruction SQL:Autoriser les requêtes de distribution ad hoc pour tous les utilisateurs

INSERT INTO OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\temp\target.mdb;User ID=Admin;Password=;')...testtable select * from dbo.testtable 

Pour ce faire, je l'ai définir le paramètre de requête de distribution ad hoc à 1 via

sp_configure 'Ad Hoc Distributed Queries', 1 

Tout fonctionne bien tant que l'instruction est exécutée avec une autorisation de base de données sysadmin.

Lorsque j'essaie d'exécuter l'instruction en tant qu'utilisateur db normal, l'instruction échoue avec un message d'erreur d'autorisation refusée.

Comment puis-je autoriser tous les utilisateurs à exécuter des instructions de distribution ad hoc?

Merci à l'avance

Marcus

+0

Avez-vous joué avec les paramètres de registre discutés ici? http://www.eggheadcafe.com/software/aspnet/29256297/nonsa-users-get-access-denied-in-ole-db-query.aspx –

+0

Malheureusement, cela ne fonctionne pas :( Toujours le même comportement. – marcus

Répondre

2

Extrait de EggHeadCafe; il semble le consensus commun qu'il s'agit d'une clé de registre appelée DisallowAdHocAccess; il doit exister avec la valeur 0 avant que les utilisateurs sans rôle sa puissent exécuter des requêtes distribuées ad hoc.

Dans la clé Server\MSSQL.1\Providers\Microsoft.Jet.OLEDB.4.0, ajoutez une valeur DWORD nommée DisallowAdHocAccess avec la valeur 0.

Autoriser l'accès ad hoc au fournisseur de Jet, en utilisant le registre (à l'aide de Management Studio ne fonctionnera pas, car il supprime le registre clé au lieu de le mettre à zéro, et est interprété une clé de Registre manquante comme "n'autorise pas l'accès ad hoc").

Si vous avez déjà l'erreur, avant d'essayer à nouveau assurer que vous redémarrez le serveur ou d'exécuter une commande DBCC FREEPROCCACHE car il semble que SQL Server ne vérifie pas la clé à nouveau si vous exécutez la même requête deux fois.

Si quelqu'un a un moyen qui n'implique pas la modification du registre, il serait bon de l'entendre.

Si cela ne fonctionne toujours pas, avez-vous essayé de configurer un serveur lié à la place? MSDN, Access Specific Linked Server Tutorial

+0

J'ai utilisé la même solution, mais avec "Microsoft.ACE.OLEDB.12.0" comme clé du fournisseur. –

Questions connexes