我有一个服务器上的不同项目的数据库。 我不能让所有的开发人员pipe理( sysadmin )访问数据库。 他们必须拥有创build和恢复数据库所需的权限。 dbcreator服务器angular色对此非常好。 换句话说,恢复备份的用户有dbcreator而不是sysadmin 。
不幸的是,因为大多数恢复的备份不是来自恢复的同一台服务器,所以恢复备份的用户会立即失去对刚刚恢复的数据库的访问权限。
他们如何还原数据库,以便从备份还原数据库的用户自动添加到dbowner数据库angular色? 在SQL Server中需要做什么更改才能实现?
更新:我试图在INSERT中添加触发器到[dbo].[restorehistory] ,但是使用sp_addrolemember添加angular色需要use [database]工作,并且这个语句在触发器中是非法的。 我也读过restorehistory触发器在数据库导入之后根本不会触发(因为它是一个系统表)。
您可以通过以下方式解决该问题:
因此,开发人员只需在共享文件夹上放置一个备份文件就可以恢复,甚至没有dbcreator权限。
如果您有兴趣,我可以提供一个PowerShell脚本示例来恢复数据库(并根据需要更改path)。
如果您的源代码是相当标准的,那么您可以创build一个存储过程,只有该angular色可以运行,将恢复文件,新数据库名称和用户标识作为参数。 让一个SP恢复数据库,然后进行权限更改。
通过设置,您可能会停止向用户提供dbcreatorangular色,并以sysadmin身份运行SP。 只需授予SP(或包含该SP的angular色/模式)的特权用户权限并对其进行完整性检查并将其括号括起来即可。
既然你已经在使用PowerShell了,你就有了恢复的逻辑。 只需将其大部分移到SQL中,然后让powershell脚本收集参数,然后调用SP。