2010-10-01 63 views
2

我們希望在一個調用另一個數據庫(B)上的存儲過程的數據庫(A)上運行觸發器。在另一個數據庫上調用存儲過程的運行觸發器

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

我們希望將此作爲LoginA和UserA在DatabaseA上執行。我們在DatabaseB上也有LoginB和UserB。

我們該如何做到這一點?

目前我們收到此錯誤信息

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

我們試圖WITH EXECUTE AS 'UserB',沒有運氣。

+0

請使用您正在使用的數據庫產品對此進行標記。 – 2010-10-01 11:53:49

+0

您無法授予DatabaseB上的LoginA權限的任何原因 - 僅限於該原因 – Bill 2010-10-01 14:24:27

回答

1

有趣的問題。你以書呆子狙擊我。我測試了一堆不同的場景。

這些失敗:存儲在DatabaseB過程TABLEA引用

  1. 觸發。 LoginA不作爲DatabaseB中的用戶存在。
  2. 在tableA上觸發將數據庫A中的引用存儲過程插入到DatabaseB.dbo.TableB中。 LoginB在DatabaseB中不存在。
  3. 以DatabaseB上的用戶身份創建LoginA,但沒有賦予它任何權限。重複測試1和測試2。兩個失敗。
  4. 創建LoginB作爲DatabaseA上的用戶。確保LoginB可以插入DatabaseB.dbo.TableB。以LoginA登錄到DatabaseA,運行EXECUTE AS User ='LoginB'。試圖插入DatabaseA.dbo.TableA。

我可以讓觸發器工作的唯一方法是在DatabaseB中爲LoginA創建一個用戶並授予執行DatabaseB存儲過程的權限。

相關問題