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

时间:2010-10-01 09:15:31

标签: sql sql-server sql-server-2008 triggers cross-database

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

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

我们希望在DatabaseA上使用UserA作为LoginA。我们在DatabaseB上也有UserB和UserB。

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

目前我们收到此错误消息

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

我们尝试了WITH EXECUTE AS 'UserB',没有运气。

1 个答案:

答案 0 :(得分:1)

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

这些失败了:

  1. 在tableA上触发引用DatabaseB中的存储过程。 LoginA不是以DatabaseB中的用户身份存在。
  2. tableA上的触发器引用DatabaseA中插入DatabaseB.dbo.TableB的存储过程。 DatabaseB中不存在LoginA。
  3. 在DatabaseB上创建LoginA作为用户,但没有赋予它任何权限。重复test1和test2。都失败了。
  4. 在DatabaseA上以用户身份创建LoginB。确保LoginB可以插入DatabaseB.dbo.TableB。以LoginA身份登录DatabaseA,运行EXECUTE AS User ='LoginB'。试图插入DatabaseA.dbo.TableA。
  5. 我能让触发器工作的唯一方法是在DatabaseB中为LoginA创建用户并授予执行DatabaseB存储过程的权限。