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
按照上述链接中的步骤操作后,我们仍然收到错误消息。
这里需要注意的是,当我们创建一个测试帐户并给它 sa 时 - 它运行得很好。我的具有管理员访问权限的同事也可以毫无问题地运行查询。
此查询是从托管此实例的服务器本地的 excel 文件提供的。
任何人都知道 2008 年的任何其他修复程序?
小智 11
我昨天刚遇到同样的问题,这是我解决它的方法:
尽管“提供程序选项”页面 (SQL Server Management Studio) 中未启用“禁止临时访问”,

注册表没有 DisallowadHocAccess = 0 键,出于某种原因,它需要在那里。

将密钥添加到注册表后,我也可以使用非管理员用户运行查询。

小智 8
确定是否为您的提供商启用了“禁止临时访问”。这可以通过以下导航路径在 SQL Management Studio 中找到:
服务器对象/链接服务器/提供程序/Microsoft.ACE.OLEDB.12.0
右键单击“Microsoft.ACE.OLEDB.12.0”提供程序并从上下文菜单中选择“属性”。
在弹出窗口中,确保清除“禁止临时访问”复选框。
或者,您可以使用以下 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文件中以设置密钥。
要点:根据我的经验,如果访问数据库的用户不是管理员或所有者类型的用户,您只需要注册表项。因此,高安全性环境将需要此注册表项。
| 归档时间: |
|
| 查看次数: |
23953 次 |
| 最近记录: |