繁体   English   中英

运行触发器,该触发器在另一个数据库上调用存储过程

[英]Running trigger that calls stored procedure on another database

我们想在一个数据库(A)上运行触发器,以在另一个数据库(B)上调用存储过程。

CREATE TRIGGER trg_A ON TableA
FOR INSERT
AS
BEGIN
    EXEC DatabaseB.dbo.stp_B
END

我们想以此作为LoginA并与DatabaseA上的UserA一起使用。 我们在DatabaseB上也有带UserB的LoginB。

我们怎样才能做到这一点?

目前,我们收到此错误消息

The server principal "..." is not able to access the 
database "DatabaseB" under the current security context.

我们已经尝试过用WITH EXECUTE AS 'UserB'运气不好。

有趣的问题。 你这书呆子me了我。 我测试了很多不同的场景。

这些失败:

  1. 在tableA上触发将引用DatabaseB中的存储过程。 LoginA作为DatabaseB中的用户不存在。
  2. 在tableA上触发将引用插入到DatabaseB.dbo.TableB中的DatabaseA中的存储过程。 LoginA在DatabaseB中不存在。
  3. 以DatabaseB的用户身份创建LoginA,但未赋予其任何权利。 重复测试1和测试2。 都失败了。
  4. 在DatabaseA上以用户身份创建LoginB。 确保LoginB可以插入DatabaseB.dbo.TableB。 以LoginA身份登录DatabaseA,然后以EXECUTE AS User ='LoginB'身份运行。 试图插入DatabaseA.dbo.TableA。

我可以使触发器起作用的唯一方法是在DatabaseB中为LoginA创建一个用户,并授予执行DatabaseB存储过程的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM