数据库a中的SQL Server触发器应该在不同用户的数据库b中输入行

时间:2017-12-13 10:16:52

标签: sql-server database triggers

我们有一个存储数万个数据库的系统,每个数据库都包含订阅我们服务的客户数据。这些数据库中的每一个都有自己的用户,这些用户已经被我们提供的分布式,厚实的应用程序前端的自定义所使用。

现在我想为每个dbs中的一个表添加一个触发器,它应该使用插入行中的一些数据更新一个公共db。如果您愿意,可以按照多对一的数据库方案排序......

这个新的通用数据库可以设置我们喜欢的方式 - 就用户/权限等而言,我们在旧dbs中插入的触发器可以非常自由地编写。但就用户/权限而言,我们无法更改这些客户数据库。

目前我正在尝试使用来宾用户,它已经被赋予了写入权限,在这个公共数据库(在下面的例子中名为" foo"),但它不起作用(我认为由于普通数据库的访客用户不允许访问客户数据库表 - 在下面的示例中命名为Bf - 它是在?)中触发的。也许我正在使用"执行"我应该使用execute as login ="?我很难找到描述差异的可理解的地方。

这是我们希望工作的触发器,并插入每个客户db:

ALTER TRIGGER [dbo].[trgAfterInsert] ON [dbo].[Bf]
WITH EXECUTE AS 'guest'
FOR INSERT
AS 
begin 
    insert into [foo].[dbo].[baar]
           (publicKey, fileId) 
    SELECT b.publicKey, a.autoId 
    FROM client_db_1.[dbo].[Integrationer] as b, inserted as a where 
a.autoId in (select top 1 autoId from inserted order by autoId)

end

正如您可能猜到的,我不是有经验的触发器用户或SQL权限/访问工作。但是我们想要收集的信息是无害的,并且它应该花费近0倍的时间来执行,并且在一个安全的,非暴露的环境中,所以我非常愿意阅读/学习是否有人有建议? / p>

/亨利

0 个答案:

没有答案