2010-05-12 75 views
17

我遇到了以下問題:有一個用戶必須執行存儲過程(spTest)。在spTest的主體中調用sp_trace_generateevent。 sp_trace_generateevent需要更改跟蹤權限,我不希望用戶擁有它。所以我希望用戶能夠執行spTest。我怎樣才能做到這一點?以另一個用戶權限執行存儲過程

回答

25

試試這個:

EXECUTE AS user = 'special_user' 

EXECUTE YourProcerdure 

REVERT 

看到這些:
Understanding Context Switching<<<has examples of things like you are trying to do
Understanding Execution Context
EXECUTE AS Clause (Transact-SQL)
EXECUTE AS (Transact-SQL)

+0

由於某種原因,它沒有幫助。我得到錯誤,我沒有權限運行sp_trace_generateevent。但是當我作爲special_user連接到服務器時,我沒有任何問題來執行sp_trace_generateevent。有任何想法嗎? – StuffHappens 2010-05-12 14:11:12

+1

來自:http://msdn.microsoft.com/zh-cn/library/ms181362.aspx在EXECUTE AS 中指定的用戶或登錄名必須分別作爲主體存在於sys.database_principals或sys.server_principals中,或者EXECUTE AS語句失敗。另外,IMPERSONATE權限必須授予委託人。除非調用者是數據庫所有者,或者是sysadmin固定服務器角色的成員,否則即使用戶通過Windows組成員身份訪問SQL Server的數據庫或實例時,主體也必須存在。 – 2010-05-12 14:21:09

+0

這個建議也沒有幫助。看來我應該打開TRUSTWORTHY。不管怎樣,謝謝你。 – StuffHappens 2010-05-13 06:38:31

-1

當您執行該特定的存儲過程時,您將需要使用所需的用戶憑證創建不同的連接。

+0

出於某種原因,但這並沒有幫助。我得到錯誤,我沒有權限運行sp_trace_generateevent。但是當我作爲special_user連接到服務器時,我沒有任何問題來執行sp_trace_generateevent。有任何想法嗎? – StuffHappens 2010-05-12 14:19:51

3

正如其他人所建議的,你可以實現你的心願使用EXECUTE AS子句什麼。有關實施選擇的示例,請參閱Execute As子句的聯機叢書文檔。

爲了進一步閱讀和發展對此主題的更多理解,您期望實現的目標是Context Switching的安全概念。

1

這是我做什麼(成功):

let Source = Sql.Database("server", "database", 
    [Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"]) 

Source 
相關問題