我们有一个存储数万个数据库的系统,每个数据库都包含订阅我们服务的客户数据。这些数据库中的每一个都有自己的用户,这些用户已经被我们提供的分布式,厚实的应用程序前端的自定义所使用。
现在我想为每个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>
/亨利