防止 SysAdmin 执行数据库还原

Ste*_*eve 3 security sql-server permissions sql-server-2008-r2 restore

我是我的 SQL Server 2008 的系统管理员,我需要成为,但我想在生产服务器上设置我的安全性,以防止我意外恢复到生产数据库。我经常将数据库恢复到测试机器上供开发人员调试/测试,虽然我总是非常小心,大约十年后,今天我不是。

我的想法是在恢复权限上设置拒绝,如果我真的需要恢复,请删除拒绝,但我找不到这样的东西。

有谁知道如何做到这一点,或者有更好的主意?

Gre*_*ker 5

首先,你不能阻止系统管理员做任何事情。:-) 作为 sysadmin 固定服务器角色成员的任何登录都在权限系统之外运行 - 他们可以做任何事情。

我的第一个想法是使用DDL 触发器来停止还原。不幸的是,恢复数据库是一种不会触发任何触发器的操作(请参阅此连接项)。

我的下一个想法是要么对恢复事件发出警报,要么定期查看msdb.dbo.restorehistory表,以便您至少可以快速捕获恢复并努力修复它们。不理想,我知道。


Mik*_*lsh 5

绿石行者是对的。如果您被授予 SA 权限,那么实际上没有什么可以阻止它。我喜欢你担心自己不会犯这样的错误。我以前见过有人被“哎呀”恢复烧伤。不漂亮。

不过,您可能可以做一些事情。您的里程可能会有所不同,但有一些想法可以让您思考:

  • 使用脚本:使用恢复脚本。养成始终使用它们的习惯。您可以提前编写和测试恢复脚本。您可以执行一些操作,例如检查您的 @@ServerName 并在其中设置一些逻辑以要求采取积极行动。在它起作用之前。就像是:

    DECLARE @ServerNameToRestoreOn VARCHAR(40)

    SET @ServerNameToRestoreOn = 'ChangeMe!' -- Servername\Instance

    IF @ServerNameToRestoreOn <> @@ServerName

    THROW 50001, 'Wrong Server!!!', 1

所以这段代码可能不完全是你所做的,但重点是 - 你需要一个积极的步骤来确定你认为你在哪里,并检查你是否在你认为自己的位置。

通过使用脚本,您还需要自己输入要恢复的数据库之类的项目,您是在强迫自己查看内容,注意 SSMS 窗口并查看哪个服务器等。您还需要为紧急情况做好准备,通过有一个过程,有一个脚本,并有能力每次都使用相同的方法。现在,当您必须恢复时,您的 CIO 站在您身后,用手指敲击您的立方体墙壁,反复说“完成了吗?” 您不会因为以不同的方式执行该过程而承受额外的压力。

  • 降低 Prod 中的默认权限许多金融机构已经要求这样做以确保合规性。DBA 拥有 SA 权限要容易得多,但在某些组织中,DBA 没有。在某些情况下,您将拥有一个 DBA_SA AD 组。该 AD 组是空的,除非有人真正需要 DBA 访问权限。进行恢复等。然后您可以被放入该组。一种痛苦取决于你每天所做的事情,取决于它的样子,这可能是一种负担,但需要考虑。
  • 使用不同的帐户进行还原- 创建一个 SQL 身份验证帐户并始终使用该帐户进行还原。在生产中,你可以称它为Prod_Restorer你喜欢的任何东西。在开发中,你可以称它为Dev_Restorer或其他。每个密码都不同,并且养成了总是使用它来恢复的习惯。再次有点痛苦,但需要考虑。

我相信你可以采取其他方法。我可能会采用脚本路线,但再次看到有人担心防止这种情况发生是个好兆头。