2015-10-04 10 views
0

我有一個存儲過程,它具有EXECUTE AS另一個具有非常有限訪問權限的用戶。當我運行該存儲過程時,我無法從OBJECT_NAME(@@ PROCID)獲得結果。 @@ PROCID確實有價值,所以這是查找失敗。OBJECT_NAME(@@ PROCID)的結果是從哪裏獲得的? (拼寫錯誤更正)

我認爲這是一個權限問題,所以有人可以告訴我存儲過程的名稱從哪裏獲得?也許我可以通過向EXECUTE AS用戶授予一些SELECT權限來解決我的問題。

如果有人有任何其他的想法,LMK。我現在硬編碼存儲過程名稱。

+0

我最初發布這個作爲OBJECT_ID不OBJECT_NAME,所以我糾正它在原來的問題。回答引用OBJECT_ID。 – Maa421s

回答

0

從文檔OBJECT_ID

用戶只能查看用戶擁有或在其上已授予​​用戶的權限的安全對象的元數據。這意味着,如果用戶對該對象沒有任何權限,那麼元數據發佈內置函數(如OBJECT_ID)可能會返回NULL。

而且further reading還會告訴你,你需要授予用戶對象上任何許可(即SELECT,EXECUTE等)

+0

您的回覆確實指出了我在進一步研究後需要做的事情。授予MyExecuteAsUser視圖定義。 [鏈接](https://www.mssqltips.com/sqlservertip/1593/granting-view-definition-permission-to-a-user-or-role-in-sql-server/) – Maa421s