对没有系统pipe理员angular色的已恢复数据库的MS SQL访问

我有一个服务器上的不同项目的数据库。 我不能让所有的开发人员pipe理( sysadmin )访问数据库。 他们必须拥有创build和恢复数据库所需的权限dbcreator服务器angular色对此非常好。 换句话说,恢复备份的用户有dbcreator而不是sysadmin

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

他们如何还原数据库,以便从备份还原数据库的用户自动添加到dbowner数据库angular色? 在SQL Server中需要做什么更改才能实现?

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

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

  • 创build一个文件夹来承载SQL备份
  • 创build一个脚本,比如PowerShell,当它在文件夹中find备份时自动还原到数据库,应用安全性,然后将备份移动到归档文件夹。 然后在完成时发送邮件。
  • 创build一个每分钟运行一次的计划任务。

因此,开发人员只需在共享文件夹上放置一个备份文件就可以恢复,甚至没有dbcreator权限。

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

如果您的源代码是相当标准的,那么您可以创build一个存储过程,只有该angular色可以运行,将恢复文件,新数据库名称和用户标识作为参数。 让一个SP恢复数据库,然后进行权限更改。

通过设置,您可能会停止向用户提供dbcreatorangular色,并以sysadmin身份运行SP。 只需授予SP(或包含该SP的angular色/模式)的特权用户权限并对其进行完整性检查并将其括号括起来即可。

既然你已经在使用PowerShell了,你就有了恢复的逻辑。 只需将其大部分移到SQL中,然后让powershell脚本收集参数,然后调用SP。