如果我正确地阅读联机丛书,用户可以恢复现有的数据库,如果他们是该数据库的DBO; 实际的话是:
如果还原的数据库不存在,则用户必须具有CREATE DATABASE权限才能执行RESTORE。 如果数据库存在,则RESTORE权限默认授予sysadmin和dbcreator固定服务器angular色的成员以及数据库的所有者(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.
这是一个有点混乱的错误信息,因为在这一点上,我们所做的只是读取备份文件,而不是创build,甚至还原现有的数据库。 所以我只能假设SQL Server在允许任何RESTORE命令执行之前尝试执行权限检查。
现在BOL没有提到任何额外的权限需要,所以我想知道哪个是正确的,或者我错过了文本中的微妙。 虽然我不怀疑错误消息的准确性,但是我真的需要做些什么才能让数据库的db_owner用户能够恢复数据库,而不必提升他们的权限?
与SQL Server 2005及以下版本相比,SQL Server 2008中的这一领域发生了一些变化。 其中的一些是在下面logging。
我的理解是,你需要db_creatorangular色的成员资格 – 基本上,SQL Server不能告诉你是否db_owner还没有被恢复的数据库! 我明白你在说什么