You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让所有用户运行该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服务账户 → 勾选“读取”权限。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:40:20