我正在尝试在 dbo.restorehistory 表上设置触发器,以尝试在数据库还原后验证用户角色。当恢复记录到历史表时,触发器只是查询“destination_database_name”。然后我尝试在有问题的数据库上运行“EXEC sp_addrolemember”。然而,显然,该过程不存在于数据库范围之外,即它在触发器内部不可用。
那么有人对如何管理此任务有建议吗?除了我的方法不起作用这一明显事实之外,完全可以有更好的方法。
简而言之,我需要能够添加一个用户并在恢复后将他设置为 db_owner。
这些恢复的问题在于它们是从我们无法控制的第 3 方应用程序远程执行的。当他们创建一个新数据库时,他们执行恢复以使用默认数据填充数据库,从而覆盖我们专门设置的用户角色,即使我们在模型数据库中指定了它们。所以...
- 第三方程序创建数据库
- 数据库从模型数据库继承用户
- 第三方程序通过恢复默认数据库覆盖用户
- 我需要重新创建这些用户并应用他们的角色
设置 ANSI_NULLS ON 去 设置 QUOTED_IDENTIFIER ON 去 -- =============================================== 创建触发器 [dbo].[AfterRestore] ON [msdb].[dbo].[restorehistory] 插入后 作为 开始 设置无计数; 将@DatabaseName 声明为 VARCHAR(100) 选择 @DatabaseName = 目标数据库名称 从插入 为登录 [域\xyzzyusers] 创建用户 [XYZZY 用户] EXEC sp_addrolemember 'db_owner', 'XYZZY 用户' 结尾 去