【发布时间】:2010-10-22 08:14:18
【问题描述】:
我有以下设置:
有一个 SQL Server 数据库,其中包含多个表,这些表上设置了触发器(用于收集历史数据)。这些触发器是带有EXECUTE AS 'HistoryUser' 的CLR 存储过程。 HistoryUser 用户是数据库中的简单用户,无需登录。它有足够的权限读取所有表并写入历史表。
当我备份数据库然后将其恢复到另一台机器(在这种情况下是虚拟机,但没关系)时,触发器不再起作用。事实上,不再模拟用户。即使是这样的简单语句
exec ('select 3') as user='HistoryUser'
产生错误:
无法作为数据库主体执行,因为主体“HistoryUser”不存在,无法模拟此类主体,或者您没有权限。
我read in MSDN 如果数据库所有者是域用户,则可能会发生这种情况,但事实并非如此。即使我将其更改为其他任何内容(他们推荐的解决方案),这个问题仍然存在。
如果我创建另一个没有登录的用户,我可以用它来模拟就好了。也就是说,这很好用:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
我不想重新创建所有这些触发器,那么有什么方法可以让现有的HistoryUser 工作吗?
【问题讨论】: