从Azure DevOps备份本地SQL数据库至共享文件夹遇权限错误求助
问题原因及解决方法
核心原因
- 权限层级未覆盖:共享文件夹权限仅控制网络访问入口,还需配置目标文件夹的NTFS权限,两者需同时授权给对应账户,缺一不可。
- 机器账户授权遗漏:域环境中,
NT AUTHORITY\SYSTEM对应域内的机器账户DOMAIN\SERVER15$,你可能仅配置了共享权限,未在NTFS权限中添加该账户。 - 权限范围不足:仅授予读取权限无法完成备份操作,需保证账户拥有写入/修改权限。
- 执行上下文混淆:若备份命令通过SQL Server执行(如
BACKUP DATABASE语句),实际执行操作的是SQL Server服务账户,而非Azure DevOps代理的SERVER15$账户,此时权限配置对象错误。
解决方法
1. 补全Server7共享文件夹的双重权限配置
共享权限设置
- 右键
\\Server7\DatabaseBackup文件夹 → 属性 → 共享标签页 → 权限。 - 添加域机器账户
DOMAIN\SERVER15$,授予读取/写入权限(至少需要写入权限完成备份文件的创建)。
NTFS权限设置
- 切换到安全标签页 → 编辑 → 添加,输入
DOMAIN\SERVER15$并确认。 - 为该账户勾选修改、写入、读取和执行权限(建议直接授予
修改权限,覆盖备份所需的读写及文件管理操作)。
2. 确认备份执行上下文
- 若你的命令是通过Azure DevOps代理直接执行文件级操作(如拷贝备份文件到共享):确保代理服务运行在
NT AUTHORITY\SYSTEM账户下,按步骤1配置权限即可。 - 若你的命令是调用SQL Server执行备份(如
sqlcmd -Q "BACKUP DATABASE MyDB TO DISK='\\Server7\DatabaseBackup\Backup.bak'"):- 在SERVER15上查看SQL Server服务的登录账户(服务管理器中找到
SQL Server (MSSQLSERVER),查看登录身份)。 - 将该账户(可能是
NT SERVICE\MSSQLSERVER或域账户)添加到Server7共享文件夹的共享和NTFS权限中,授予写入权限。
- 在SERVER15上查看SQL Server服务的登录账户(服务管理器中找到
3. 验证权限有效性
- 在SERVER15上,以本地系统账户身份测试共享访问:
若成功创建psexec -s cmd.exe net use \\Server7\DatabaseBackup /user:DOMAIN\SERVER15$ "" echo test > \\Server7\DatabaseBackup\test.txttest.txt,说明权限配置正确;若仍报错,需检查账户拼写、域信任关系或权限继承设置。
4. 可选:切换Azure DevOps代理运行账户
- 若机器账户权限配置受限,可将Azure DevOps代理服务切换为拥有Server7共享权限的域服务账户:
- 在SERVER15上停止Azure DevOps代理服务。
- 打开服务属性,将登录身份改为指定域账户,输入密码并确认。
- 启动代理服务,确保该域账户具备SERVER15本地的登录作为服务权限。
内容的提问来源于stack exchange,提问作者Bastien Vandamme
相关产品推荐
相关产品推荐

