数据库未授权无法恢复备份?附本人使用的恢复操作脚本
咱们先从你提供的备份脚本和常见的未授权场景入手,一步步拆解问题:
首先先把你的备份操作脚本格式化出来,方便查看:
你的备份执行脚本
-- 步骤1:启用包含数据库身份验证 sp_configure 'contained database authentication', 1; GO RECONFIGURE; GO -- 步骤2:执行完整备份和日志备份 BACKUP DATABASE DataBaseName TO DISK = 'DataBaseName Path (Local Drive)' GO BACKUP LOG DataBaseName TO DISK = 'DataBaseName Path (Local Drive)' GO
接下来是几个最可能导致恢复时未授权的原因和对应的解决办法:
备份文件所在路径的权限问题
这是最常见的“踩坑点”:执行恢复操作的SQL Server服务账户(比如默认的NT SERVICE\MSSQLSERVER)需要对备份文件所在的本地文件夹有读取权限。如果你把备份存在了自定义路径(比如D:\DBBackups),但没给SQL服务账户开放权限,就会触发未授权报错。
👉 解决方法:找到备份文件夹,右键→属性→安全→添加SQL Server服务账户,赋予它「读取和执行」「列出文件夹内容」「读取」这三项权限。目标服务器未启用包含数据库身份验证
你在备份前启用了contained database authentication,如果恢复的目标服务器没开启这个配置,恢复包含数据库时会直接因为配置不兼容触发权限类报错。
👉 解决方法:在目标服务器上执行和你步骤1完全一样的脚本,先启用该配置:sp_configure 'contained database authentication', 1; GO RECONFIGURE; GO备份文件的NTFS权限继承问题
如果备份文件是从其他服务器复制过来的,可能会带着原服务器的权限设置,导致当前SQL服务账户无法读取。最简单的测试方法是把备份文件移到SQL Server默认的备份目录(一般是C:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\Backup),这个目录默认已经给SQL服务账户开放了权限。执行恢复操作的登录账户权限不足
你用来执行恢复的SQL登录账户需要有RESTORE DATABASE权限,或者是sysadmin/dbcreator服务器角色的成员。如果权限不够,也会提示未授权。
👉 解决方法:用高权限账户(比如sa)给你的登录账户授权:USE master; GO GRANT RESTORE DATABASE TO YourLoginName; GO
先从这几个方向排查,应该能解决大部分恢复时的未授权问题。
内容的提问来源于stack exchange,提问作者Ankit Panwar

