如何解决没有 SYSADMIN 角色的 SQL Server OPENROWSET
我们广泛使用 OPENROWSET
函数将 .CSV
和 Excel 文件导入到我们的 sql Server 2012 环境中,使用 MSDAsql 或 ACE:
SELECT *
FROM OPENROWSET ('MSDAsql','DRIVER={MICROSOFT access TEXT DRIVER (*.TXT,*.CSV)};','SELECT * FROM E:\INCOMING\REPORT_EXTRACT.CSV')
或者使用 ACE:
SELECT * FROM OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','TEXT;DATABASE=E:\INCOMING\;HDR=YES;','SELECT * FROM [REPORT_EXTRACT.CSV]');
我们遇到了经典的错误消息:
消息 7415,级别 16,状态 1,第 1 行
对 OLE DB 提供程序“MSDAsql”的临时访问已被拒绝。您必须通过链接服务器访问此提供程序。
启用此功能的唯一解决方法是授予上述用户 SYSADMIN
角色 - 显然并不理想。
文件的位置在服务器本身上,访问该文件的用户确实具有访问该文件夹的必要权限。 sql Server 服务在具有与桌面交互权限的本地系统帐户下运行。
我们尝试了以下变通方法/修复无济于事:
1 执行以下代码:
EXEC master . dbo. sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′,N’AllowInProcess’,1
GO
EXEC master . dbo. sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′,N’DynamicParameters’,1
GO
这是当前状态:
3 为上述用户添加 ADMINISTER BULK OPERATIONS 权限
我们的程序中有许多使用 OPENROWSET 的表达式和文件,因此批量插入、构建 SSIS 包、利用 Excel 文件作为链接服务器都不是可行的选择。
有什么建议吗?
解决方法
哇 - 经过多年的故障排除,我终于弄清楚它是什么!
控制允许 Ad-hoc 访问的注册表项值依赖于 DisallowAdHocAccess
在那个 EXACT 句中。
在我们的例子中,AdHoc 中的“A”没有大写:
为了解决这个问题,我:
- 按照说明删除注册表值
- 重新启用
Disallow AdHoc Access
选项(重新创建注册表值)
- 手动将注册表
DisallowAdHocAccess
值设置为“0”
问题解决了!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。