我们广泛使用OPENROWSET函数将.CSV和Excel文件导入到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]');我们正在经历经典的错误信息:
Msg 7415,16级,状态1,第1行
对OLE DB提供程序'MSDASQL‘的临时访问已被拒绝。必须通过链接服务器访问此提供程序。
唯一能做到这一点的方法就是授予上述用户SYSADMIN角色--显然不太理想。
文件的位置位于服务器本身,访问该文件的用户确实拥有访问该文件文件夹的必要权限。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*2 DisAllowAdHocAccess注册表修复程序:
这是目前的状况:

3向上述用户添加“管理批量操作”权限
我们的过程中有几十个表达式和文件使用OPENROWSET,因此批量插入、构建SSIS包、利用Excel文件作为链接服务器是不可行的选择。
有什么建议吗?
发布于 2020-12-31 03:07:56
哇-经过多年的故障排除,我终于明白了这是什么!
控制Ad访问允许的注册表条目值依赖于DisallowAdHocAccess在这个确切的句子中的情况。
在我们的例子中,AdHoc中的"A“没有大写:

为了解决这个问题,我:
described
Disallow AdHoc Access选项(重新创建注册表值)

DisallowAdHocAccess值设置为"0"

问题解决了!
https://stackoverflow.com/questions/65497253
复制相似问题