SQL Server错误“对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问”的帮助


8

因此,我们遇到了一个有趣的问题,即用户试图在SQL Server 2008 R2中查询视图时收到以下错误:

消息7415,级别16,状态1,行1对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问已被拒绝。您必须通过链接服务器访问此提供程序。

研究此问题后,我发现了很多文章,列出了对OPENROWSET参数进行更改,注册表值更改,AdHoc DI分布式查询等的内容。(链接到下面的文章)

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/

按照上述链接中的步骤操作后,我们仍然会收到错误消息。

需要注意的是,当我们创建一个测试帐户并给它一个sa时-它运行得很好。我的具有管理员访问权限的同事也可以毫无问题地运行查询。

该查询是从托管该实例的服务器的本地excel文件中获取的。

有人知道2008年有其他修复程序吗?

Answers:


10

昨天我遇到了同样的问题,这就是我如何解决的问题:

尽管未在“提供程序选项”页面(SQL Server Management Studio)上启用“禁止临时访问”,

在此处输入图片说明

注册表没有DisallowadHocAccess = 0项,并且出于某种原因,它必须在那里存在。

在此处输入图片说明

在将注册表项添加到注册表后,我还能够以非管理员用户身份运行查询。

在此处输入图片说明


8
  1. 确定是否为您的提供商启用了“禁止临时访问”。可以通过以下导航路径在SQL Management Studio中找到它:

  2. 服务器对象/链接的服务器/提供程序/Microsoft.ACE.OLEDB.12.0

  3. 右键单击“ Microsoft.ACE.OLEDB.12.0”提供程序,然后从上下文菜单中选择“属性”。

  4. 在弹出窗口中,确保清除“禁止临时访问”复选框。

另外,您可以使用以下SQL将其设置为禁用:

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

接下来,验证是否设置了注册表项。在Regedit中,进行以下导航:

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

注意:如果使用默认实例,则可能没有实例名称。

另一个注意事项:您可以将其复制并粘贴到.reg文件中以设置密钥。

关键点:根据我的经验,仅当访问数据库的用户不是管理员或所有者类型的用户时,才需要注册表项。因此,高安全性环境将需要此注册表项。


我发布了这个答案,因为另一个答案包含无法看到的图像,因为它们在我的工作场所被遮挡了。除非绝对必要,否则请不要使用图像!
Slogmeister Extraordinaire 2014年

添加注册表项对我有用;通过GUI,不是。
蒂姆(Tim)

0

对于我来说,请确保您在[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _。\ Providers \ Microsoft.ACE.OLEDB.12.0]中有一个名为“ DisallowAdhocAccess”的值= 0,如果不存在,请创建它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.