错误3201“拒绝访问”本质是Windows操作系统拦截,因SQL Server服务账户缺乏对备份路径的NTFS写入权限,而非数据库权限问题;需确认服务账户名、授予其对绝对路径目录的完全控制权,并确保目录存在、磁盘空间充足、防病毒软件未拦截。
SQL Server备份设备错误3201:为什么“拒绝访问”不是数据库权限问题
这个错误(消息3201,级别 16,状态 1,操作系统错误5)根本不在sql server内部发生,而是windows在尝试用sql server服务账户打开或创建备份文件时被系统拦截。navicat调用的是sql server自身的backup database命令,它不会自己写文件——所有i/o都由sql server服务进程代劳,所以真正需要权限的,是运行该服务的那个windows账户,不是你navicat里填的登录用户。
确认SQL Server服务账户名并授予权限
直接看服务配置比猜更可靠:
- 打开「SQL Server 配置管理器」→「SQL Server 服务」→ 找到你的实例(比如
SQL Server (MSSQLSERVER)或SQL Server (YOURINSTANCE))→ 右键「属性」→「登录」选项卡 → 记下「此账户」字段里的完整名称,常见如NT SERVICE\MSSQLSERVER、NT SERVICE\MSSQL$YOURINSTANCE或域账户DOMAIN\sqlsvc - 右键你要写的备份目录(例如
D:\SQLBackups\)→「属性」→「安全」→「编辑」→「添加」→ 粘贴刚才记下的账户名 → 点击「检查名称」→ 勾选「完全控制」→ 确定 - 如果目标是网络路径(UNC),必须同时配置共享权限(Everyone读写)和NTFS权限(服务账户完全控制),且SQL Server服务账户需有访问该共享的凭据(通常需用该账户登录系统或配置映射)
Navicat里不能只填相对路径或默认路径
Navicat在SQL Server备份向导中填的「备份到文件」路径,会原样传给SQL Server执行。若填的是 backup.bak 或 ./backup.bak,SQL Server会试图在自身安装目录(如 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\)下写,而该目录默认禁止写入。
- 务必使用绝对路径,且指向你已授予权限的目录,例如:
D:\SQLBackups\myapp_full_20260423.bak - 路径中避免中文、空格、特殊符号;不要用环境变量(如
%USERPROFILE%),SQL Server不解析它们 - 提前手动创建好
D:\SQLBackups\目录,并验证服务账户能否在里面新建文本文件(用PowerShell以服务账户身份测试最准)
容易被忽略的三个硬性前提
即使权限全给了,以下三点任一不满足,照样报错3201:
- 磁盘空间不足:SQL Server会在写入前检查可用空间,但错误仍显示为“拒绝访问”。用
Get-Volume -DriveLetter D | Select-Object SizeRemaining确认剩余空间大于数据库大小的1.2倍 - 目标路径不存在:SQL Server不会自动创建父目录。
Test-Path "D:\SQLBackups"必须返回True - 防病毒软件锁定:某些实时防护会拦截SQL Server对bak文件的首次写入。临时禁用或添加排除项(路径+
sqlservr.exe进程)
服务账户权限、绝对路径、父目录存在——这三者缺一不可,少验一个,就卡在“拒绝访问”里出不来。











