如何让所有用户运行该OPENROWSET SQL查询并解决权限报错?
解决方案:非管理员用户执行OPENROWSET导入Excel报错处理
针对你遇到的非管理员用户执行OPENROWSET调用ACE驱动时出现的Msg 7399和Msg 7303错误,可按以下方向排查解决:
1. 确认ACE驱动的安装与权限配置
- 匹配驱动位数:确保报表服务器和本地机器安装的ACE驱动(Microsoft Access Database Engine)位数与SQL Server一致(比如SQL是64位,必须安装64位ACE驱动,32位驱动无法在64位SQL进程中运行)。
- 授予SQL服务账户文件访问权限:OPENROWSET由SQL Server服务进程执行,因此需要给SQL Server服务运行的账户(而非当前登录用户)授予共享目录
\\COMPANYNAME\company\customer\Comcast\的读取权限,以及Comcast.xlsx文件的读取权限。 - 注册表权限配置:给SQL服务账户授予ACE驱动注册表项的读取权限:
- 64位系统:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine - 32位系统/64位系统兼容模式:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine
右键注册表项 → 权限 → 添加SQL服务账户 → 勾选“读取”权限。
- 64位系统:
2. 配置SQL Server的分布式查询选项
需要管理员权限执行以下SQL命令,启用相关配置后所有用户均可受益:
-- 启用高级选项 sp_configure 'show advanced options', 1; RECONFIGURE; -- 启用Ad Hoc Distributed Queries sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; -- 配置ACE驱动的进程内执行与动态参数 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1; EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;
3. 绕过OPENROWSET的替代方案
既然已经使用Power Automate流程,可直接在自动化流程内完成数据导入,避免依赖ACE驱动和OPENROWSET的权限问题:
- 桌面流直接导入:在Power Automate桌面流中,转换XLSM为XLSX后,添加“读取Excel工作表”操作获取数据,再通过“执行SQL语句”操作调用存储过程插入数据,全程由桌面流进程执行,权限配置更灵活。
- 云端流处理:将转换后的XLSX文件上传至SharePoint/OneDrive,用Power Automate云端流的“列出表格中的行”操作读取数据,再通过“执行SQL”操作插入到公司数据库,完全规避本地权限和驱动依赖问题。
4. 共享目录权限额外检查
确保共享目录的NTFS权限和共享权限均配置正确:
- 共享权限:给SQL服务账户(或包含该账户的组)授予“读取”权限。
- NTFS权限:同样给SQL服务账户授予“读取&执行”、“列出文件夹内容”、“读取”权限。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

