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

Joh*_*boy 9 sql-server excel linked-server

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

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

在研究这个问题时,我发现有很多文章列出了对 OPENROWSET 参数进行更改、注册表值更改、AdHoc 分布式查询等(链接到下面的文章)

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 年的任何其他修复程序?

小智 11

我昨天刚遇到同样的问题,这是我解决它的方法:

尽管“提供程序选项”页面 (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
Run Code Online (Sandbox Code Playgroud)

接下来,验证是否设置了注册表项。在 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
Run Code Online (Sandbox Code Playgroud)

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

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

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