没有 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 服务在具有与桌面交互权限的本地系统帐户下运行。

  • List item

我们尝试了以下变通方法/修复无济于事:

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

*2 DisAllowAdHocAccess 注册表修复:

这是当前状态:

enter image description here

3 为上述用户添加 ADMINISTER BULK OPERATIONS 权限

我们的程序中有许多使用 OPENROWSET 的表达式和文件,因此批量插入、构建 SSIS 包、利用 Excel 文件作为链接服务器都不是可行的选择。

有什么建议吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)