2014-09-30 35 views
2

我有一個從另一個數據庫的表中選擇數據的過程,也使用sp_send_dbmail。看起來執行權限在程序內部的跨數據庫調用中被拒絕。GRANT EXECUTE是否允許您訪問存儲過程中的所有對象?

有人可以確認我還需要對這些跨數據庫對象單獨的權限,或者是否有任何方法來授予執行權限,以便它可以訪問該過程下的任何東西?

這是授予執行權限的SQL語句:

GRANT EXECUTE ON OBJECT::uspAppStoredProcedure TO AppRole; 

這是我得到的錯誤:

執行權限被拒絕的對象 'sp_send_dbmail', 數據庫「MSDB ',schema'dbo'。

我得到了一個類似的錯誤,試圖從另一個數據庫中選擇數據。

回答

1

此行爲是由cross db ownership chaining option in SQL Server, which is disabled by default.

uspAppStoredProcedure控制試圖所有權鏈之外執行存儲過程,所以需要給予執行sp_send_dbmail明確許可。

可以在所涉及的數據庫上啓用所有權鏈接,這將消除授予特定權限的需要,但這樣做會帶來安全風險......因此根據需要授予顯式訪問權限可能會更好。

This article goes into additional details on cross database ownership chaining.

另一個潛在的解決方案將是限定存儲的過程,這將允許你給不同的用戶爲described in this article的上下文中執行時,使利用EXECUTE AS子句。

這將允許您創建一個存儲過程,允許特定用戶執行它,同時避免必須直接向用戶授予對基礎對象的權限。

+0

感謝您的回答。現在一切都有意義。 – Otake 2014-10-01 12:24:56

相關問題