![非 SA 角色恢复数据库?](https://linux22.com/image/546148/%E9%9D%9E%20SA%20%E8%A7%92%E8%89%B2%E6%81%A2%E5%A4%8D%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%9F.png)
如果我正确阅读了联机丛书,则如果用户是该数据库的 DBO,则可以恢复现有数据库;实际的内容是:
如果要恢复的数据库不存在,则用户必须具有 CREATE DATABASE 权限才能执行 RESTORE。如果数据库存在,则 RESTORE 权限默认授予 sysadmin 和 dbcreator 固定服务器角色的成员以及数据库的所有者 (dbo)(对于 FROM DATABASE_SNAPSHOT 选项,数据库始终存在)。
不幸的是,这似乎并不完全正确,或者我忽略了一个微妙之处。对于特定的数据库,我试图让它工作,但当用户执行RESTORE FILELISTONLY
获取备份文件中的文件时,我们收到错误:
Msg 262, Level 14, State 1, Line 1
CREATE DATABASE permission denied in database 'master'.
Msg 3013, Level 16, State 1, Line 1
RESTORE FILELIST is terminating abnormally.
这是一个有点令人困惑的错误消息,因为此时我们所做的只是尝试读取备份文件,而不是创建,甚至不是恢复现有数据库;所以我只能假设 SQL Server 在允许任何RESTORE
命令执行之前尝试进行权限检查。
现在 BOL 没有提到需要任何额外的权限,所以我想知道哪个是正确的,或者我是否遗漏了文本中的细微之处。虽然我并不怀疑错误消息的准确性,但我真正需要做什么才能让db_owner
数据库用户能够恢复该数据库,而无需提升他们的权限?
答案1
与 SQL Server 2005 及以下版本相比,SQL Server 2008 及以上版本在此方面有所变化。部分内容记录如下。
答案2
我的理解是,您需要拥有 db_creator 角色的成员资格 - 基本上,SQL Server 无法判断您是否是尚未恢复的数据库的 db_owner!不过我明白你的意思...