SQL Server Agent访问远程计算机服务遭拒,请求解决方案
解决SQL Agent作业调用远程BAT访问被拒绝的配置方案
核心原因
手动运行BAT时使用的是当前登录用户的权限(该用户已具备远程访问权限),而SQL Agent作业默认使用SQL Server Agent服务账号(通常是Local System,无网络访问权限)或指定的代理账号,这些账号缺少访问远程共享目录及远程服务器服务的权限,导致“访问被拒绝”。
需要修改的配置项
1. 调整SQL Server Agent服务登录账号
- 打开
services.msc,找到SQL Server Agent服务,右键选择「属性」→「登录」选项卡。 - 将默认的
Local System账号替换为域账号(推荐),或与远程服务器本地账号同名同密码的本地账号:- 域账号需具备:
- SQL本地服务器的登录权限,且属于
SQL Server Agent Operators角色; - 远程服务器共享目录的共享权限(至少「读取」)和NTFS权限(至少「读取&执行」);
- 远程服务器的远程服务访问权限(加入远程服务器的
Remote Management Users组,或通过本地安全策略授予「从网络访问此计算机」权限)。
- SQL本地服务器的登录权限,且属于
- 域账号需具备:
2. 配置远程服务器共享与权限
- 远程服务器的目标共享目录:
- 在「共享权限」中添加SQL Agent服务账号,授予「读取」权限;
- 在「NTFS权限」中添加该账号,授予「读取&执行」、「读取」权限。
- 确保远程服务器未限制该账号的网络访问:打开「本地安全策略」→「本地策略」→「用户权利指派」,确认账号在「从网络访问此计算机」列表中,且不在「拒绝从网络访问此计算机」列表。
3. 开启远程服务器的必要服务与防火墙规则
- 远程服务器需启动以下服务:
Remote Registry(部分服务检查依赖注册表访问);Windows Management Instrumentation(若BAT使用WMI查询服务状态)。
- 防火墙配置:
- 允许
Windows Management Instrumentation (WMI)入站规则; - 开放文件共享端口(135、445)及远程服务控制所需端口。
- 允许
4. 配置WMI远程访问权限(若BAT依赖WMI)
- 在远程服务器打开「WMI控制」(运行
wmimgmt.msc),右键选择「属性」→「安全」选项卡。 - 展开
Root\CIMV2节点,添加SQL Agent服务账号,授予「Enable Account」和「Remote Enable」权限。
5. 检查SQL Agent代理账号(若作业使用代理)
- 若作业通过代理账号执行
cmdexec步骤:- 在SSMS中展开「SQL Server Agent」→「代理」→「代理账号」,确认代理账号关联了
cmdexec子系统; - 确保该代理账号具备上述所有权限(共享访问、远程服务访问、WMI权限)。
- 在SSMS中展开「SQL Server Agent」→「代理」→「代理账号」,确认代理账号关联了
验证步骤
- 使用SQL Agent的目标账号(服务账号或代理账号)登录SQL所在服务器,手动执行BAT文件,确认可正常访问远程服务;
- 或用
runas命令测试权限:runas /user:DOMAIN\TargetAccount "cmd /c \\RemoteServer\SharePath\check_service.bat"
内容的提问来源于stack exchange,提问作者Dan Goodwin
相关产品推荐
相关产品推荐

