无需 sysadmin 角色即可访问恢复的数据库

无需 sysadmin 角色即可访问恢复的数据库

我在一台服务器上有来自不同项目的数据库。我无法授予所有开发人员sysadmin对数据库的管理 () 访问权限。他们必须拥有创建和恢复数据库所需的权限。dbcreator服务器角色可以很好地完成此任务。换句话说,恢复备份的用户有dbcreator但没有sysadmin

不幸的是,由于大多数恢复的备份不是来自恢复它们的同一台服务器,恢复备份的用户会立即失去对刚刚恢复的数据库的访问权限。

他们如何恢复数据库,以便从备份中恢复数据库的用户自动添加到dbowner数据库角色? SQL Server 需要进行哪些更改才能实现这一点?

更新:我尝试在 INSERT 上添加触发器[dbo].[restorehistory],但使用sp_addrolemember需要添加角色use [database]才能工作,并且此语句在触发器中是非法的。我还读到,restorehistory在数据库导入后,触发器根本不会触发(因为它是一个系统表)。

答案1

您可以通过以下方式解决该问题:

  • 创建文件夹来托管 SQL 备份
  • 创建一个脚本(例如 powershell 脚本),当它在文件夹中找到备份时自动恢复到数据库,应用安全性,然后将备份移动到存档文件夹。然后在完成后发送邮件。
  • 创建每分钟运行一次的计划任务。

因此开发人员只需将备份文件放在共享文件夹上即可恢复它,甚至不需要 dbcreator 权限。

如果您有兴趣,我可以提供一个 powershell 脚本示例来恢复数据库(例如根据需要更改路径)。

答案2

如果您的源相当标准,您可以创建一个只有该角色可以运行的存储过程,该过程以恢复文件、新数据库名称和用户 ID 作为参数。让一个 SP 恢复数据库,然后进行权限更改。

通过这样的设置,您可能可以停止为用户提供 dbcreator 角色,而只需以 sysadmin 身份运行 SP。只需将特权用户权限授予 SP(或包含该 SP 的角色/架构),然后进行健全性检查并括住参数。

由于您已经在使用 powershell,因此您已经弄清楚了恢复的逻辑。只需将大部分内容移至 SQL,然后让 powershell 脚本收集参数,然后调用 SP。

相关内容