2011-08-23 32 views
3

內執行我用下面的代碼來設置僵局監測:msdb.dbo.sp_send_dbmail沒有一個存儲過程

http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx

,它工作正常。 我遇到的問題是msdb.dbo.sp_send_dbmail似乎不起作用。 如果我手動從我的會話中執行,它工作正常,但是從在存儲過程中,會出現以下錯誤:

2011-08-23 16:42:45.28 spid219s活化PROC [DBO] [。在隊列Wayne.dbo.DeadLockNotificationsQueue上運行的usp_ProcessNotification]輸出以下內容:'接收Service Broker消息FROM隊列DeadLockNotificationsQueue時出錯。 數據庫名稱:Wayne;錯誤編號:229;錯誤消息:EXECUTE權限在對象'sp_send_dbmail',數據庫'msdb',模式'dbo'上被拒絕。

我也跑以下:

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole中' ,@成員名稱= '';

與我的登錄作爲成員名,但它似乎沒有幫助。

我需要做些什麼來糾正這個問題?

謝謝。

Wayne。

+1

這是關於激活過程正在運行的帳戶。這需要發揮正確的作用。看到這篇文章http://rusanu.com/2006/01/12/why-does-feature-not-work-under-activation/ –

回答

5

Martin指出了正確的原因,EXECUTE AS環境下您的激活過程運行。您可以使用代碼簽名來授予所需的權限,如Call a procedure in another database from an activated procedure中所示。或者你可以簡單地標記數據庫Waynetrustworthy

ALTER DATABASE [Wayne] SET TRUSTWORTHY ON; 

前一種方法是複雜的,但在一個安全的環境是必須的。後面的方法要容易得多,但這意味着數據庫的dbo可以將自己提升爲系統管理員權限。如果安全問題不是問題,則可以使用更簡單的TRUSTWORTHY方法。

+0

使用不需要值得信賴的選項。值得信賴的選項就像是說:「我信任此數據庫中的所有當前*和將來*代碼」。不是一個好地方。此外,簽署存儲過程和所有不*這*複雜。 –

相關問題