我已經得到以下設置:問題與SQL Server「執行AS」
有一個SQL Server數據庫與幾個表上設置觸發器(收集歷史數據)。這些觸發器是使用EXECUTE AS 'HistoryUser'
的CLR存儲過程。 HistoryUser
用戶是數據庫中的簡單用戶,無需登錄。它具有足夠的權限來讀取所有表並寫入歷史記錄表。
當我備份數據庫,然後將其恢復到另一臺機器(在這種情況下,虛擬機,但它並不重要),觸發器不再工作。事實上,用戶不再冒用了。即使是一個簡單的語句,如本
exec ('select 3') as user='HistoryUser'
產生一個錯誤:
Cannot execute as the database principal because the principal "HistoryUser" does not exist, this type of principal cannot be impersonated, or you do not have permission.
我read in MSDN,如果DB所有者是域用戶這可能發生,但事實並非如此。即使我將它改爲其他任何東西(他們推薦的解決方案),這個問題仍然存在。
如果我創建另一個用戶沒有登錄,我可以用它來模仿就好了。也就是說,這工作得很好:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
我不想重新創建所有這些觸發器,那麼有沒有什麼辦法我怎樣才能使現有HistoryUser
工作?
凹凸:抱歉,這是有點急...
NOP,沒有幫助。 – 2009-04-28 15:15:01