配置Microsoft.ACE.OLEDB.12.0后出现SQL错误17053如何解决
问题原因
开启ACE OLEDB驱动的AllowInProcess参数后,SQL Server服务运行账户缺少对应注册表项的读写权限,触发访问拒绝报错。
修复操作步骤
1. 确认SQL Server服务运行账户
- 按下
Win+R组合键,输入services.msc回车打开服务控制台 - 找到名称为
SQL Server (你的实例名)的服务,右键选择「属性」,切换到「登录」标签页,记下当前使用的账户名(默认实例的服务名通常为SQL Server (MSSQLSERVER),默认账户可能是NT Service\MSSQLSERVER、本地系统账户或自定义域账户)
2. 修改注册表项权限
- 按下
Win+R组合键,输入regedit回车打开注册表编辑器 - 导航到对应注册表路径:
- 64位系统安装64位ACE驱动:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL<版本号>.<实例名>\Providers\Microsoft.ACE.OLEDB.12.0 - 64位系统安装32位ACE驱动:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SQL Server\MSSQL<版本号>.<实例名>\Providers\Microsoft.ACE.OLEDB.12.0
注:路径中<版本号>对应SQL Server大版本,例如SQL Server 2019对应15,SQL Server 2016对应13;默认实例的<实例名>为MSSQLSERVER
- 64位系统安装64位ACE驱动:
- 右键点击
Microsoft.ACE.OLEDB.12.0注册表项,选择「权限」 - 点击「添加」,输入第一步查到的SQL Server服务账户名,点击「检查名称」确认无误后点击确定
- 选中刚添加的账户,在权限列表中勾选「完全控制」和「读取」的允许复选框,点击确定保存配置
- 若修改后仍报错,可以临时添加
Everyone账户并授予读取权限验证效果,生产环境验证通过后可回收该权限
3. 重启SQL Server服务
回到服务控制台,右键SQL Server (你的实例名)选择「重启」,等待服务启动完成后查看SQL Server错误日志,报错将不再生成。
可选回退方案
如果不需要使用ACE OLEDB的进程内运行特性,可以直接回滚之前的配置,报错也会消失,执行以下SQL命令后重启SQL Server服务即可:
EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0 EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 0
内容的提问来源于stack exchange,提问作者xl0911
相关产品推荐
相关产品推荐

