2010-08-02 51 views
4

我正在使用AD Hoc分布查询将数据从MS SQLServer 2008传输到MS Access。允许所有用户的点对点分配查询

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

要做到这一点,我设置了临时发布查询参数1通过

sp_configure 'Ad Hoc Distributed Queries', 1 

一切都很好,只要执行该语句的工作原理: 的进程正在使用一个SQL语句开始具有系统管理员数据库权限。

当我尝试将语句作为正常的db用户执行时,语句失败并显示权限被拒绝的错误消息。

我该如何授予所有用户执行临时分发语句?

预先感谢

马库斯

+0

你是否玩过这里讨论的注册表设置? http://www.eggheadcafe.com/software/aspnet/29256297/nonsa-users-get-access-denied-in-ole-db-query.aspx – 2010-08-02 15:45:05

+0

不幸的是它不起作用:( 仍然是一样的行为。 – marcus 2010-08-25 23:57:23

回答

2

EggHeadCafe两者;似乎普遍认为这是一个名为DisallowAdHocAccess的注册表键;在没有sa角色的用户可以执行临时分布式查询之前,它需要存在值0

Server\MSSQL.1\Providers\Microsoft.Jet.OLEDB.4.0键,添加具有价值0命名DisallowAdHocAccess一个DWORD 值。

允许Jet提供点对点访问,通过使用注册表 (使用Management Studio将无法正常工作,因为它会删除注册表 键而不是将其设置为零的,并且缺少的注册表项 解释为“不允许临时访问”)。

如果您之前得到了错误,重新尝试确保 重新启动服务器或运行DBCC FREEPROCCACHE命令,因为它似乎 ,如果您运行相同的查询 两次SQL Server将不会再次检查键之前。

如果有人有办法不涉及编辑注册表,但很高兴听到它。

如果这仍然不起作用,您是否尝试设置链接服务器? MSDNAccess Specific Linked Server Tutorial

+0

我使用了相同的解决方案,但将“Microsoft.ACE.OLEDB.12.0”作为提供程序密钥。 – 2016-04-25 18:02:53