2017-03-20 144 views
0

我不認爲這是可能的,但我希望我失去了一些東西。比方說,我在SQL Server 2012 SP3這個存儲過程:授予執行存儲過程沒有SELECT權限的基礎表

CREATE PROCEDURE [dbo].[myproc] 
AS 
    SELECT * FROM [dbo].[mytable] 

我想授予數據庫主體沒有基礎表授予權限,以SELECT執行[myproc]的權限。

我已經嘗試了各種各樣的GRANT聲明沒有運氣。當我執行myproc,我仍然得到錯誤mytable上

數據庫主體否認

選擇的權限不是數據庫所有者,我不想讓他的DB所有者。

正在嘗試做什麼?

謝謝。

+0

問題是:誰擁有該表和誰擁有該過程?如果兩者不同,你可能會與所有權鏈接發生衝突。 –

回答

1

Weicher, 除非有一個具體的否定基礎表的這個GRANT語句應該工作:

GRANT Exec [dbo].[myproc] TO MyUser; 
GO 

的代碼測試這樣的:

EXECUTE AS USER = 'MyUser'; 
GO 
EXEC [dbo].[myproc]; -- should work 
GO 
SELECT id FROM [dbo].[table]; -- should fail 
GO 
REVERT; 

當我改變代碼6去星期天的方法,我喜歡開始乾淨,以確保我沒有在無意間打一些東西,並且非常有目的。步。通過。步。

  1. 製作測試表,授予MyUser讀取權限 - 您可以使用execute作爲用戶代碼運行選擇 嗎?
  2. 刪除閱讀權限,選擇工作?如果不是這樣,世界仍然是理智的(有些)。現在嘗試使用新的存儲過程
  3. 授予MyUser權限 - 是否有效?

如果是這樣,那麼請在實際表格上進行相同的測試 - 您是否可以授予讀取權限,然後是否可以刪除讀取權限。如果是這樣,重新創建SP並再試一次。

對不起,如果這太簡單了,沒有任何意圖只是想確保我們在同一頁測試明智。

如果它不起作用,請發佈測試結果,我會盡力提供幫助。

0
GRANT EXECUTE ON SPNAME TO DBUSER