![在 SQL Server 2012 上恢复*某些*数据库的最低权限](https://linux22.com/image/721727/%E5%9C%A8%20SQL%20Server%202012%20%E4%B8%8A%E6%81%A2%E5%A4%8D*%E6%9F%90%E4%BA%9B*%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%9C%80%E4%BD%8E%E6%9D%83%E9%99%90.png)
我正在尝试创建一组权限,其中 SQL 登录名可以创建所有数据库的备份,但只能恢复 TEST 数据库上的备份。应使用另一个登录名来恢复到 LIVE(位于同一 SQL 服务器上)。
这里它指出:
如果数据库存在,则 RESTORE 权限默认授予 sysadmin 和 dbcreator 固定服务器角色的成员以及数据库的所有者 (dbo)
基于此,我尝试让登录成为 TEST 数据库的所有者,并拥有 db_owner db 权限,但没有 sysadmin 服务器角色。在 LIVE 数据库上,登录具有:db_accessadmin、db_backupoperator、db_datareader、db_denydatawriter、db_securityadmin(没有所有权)。
但恢复仍然不起作用。如果我尝试执行恢复,我无法查看 .bak 文件中的备份集。我认为对话框正在后台执行 RESTORE HEADERONLY;如果我运行,RESTORE HEADERONLY FROM DISK = 'D:\Path\backup.bak'
我会得到CREATE DATABASE permission denied in database 'master'
。我可以使用 sysadmin 角色正常查看备份集。
没有系统管理员的话这可能吗?
答案1
对于所有那些对我的问题大喊大叫的 DBA,我想我可以让你们不再痛苦:
我认为解决这个问题的正确方法是创建一个第二个命名实例SQL 服务器,这样实时数据库和测试数据库之间就有了额外的隔离。然后,您可以为每个实例设置所需的任何权限。
看来您需要具有 sysadmin 或 dbcreator 服务器角色和RESTORE 的 db_owner 数据库角色