2012-05-28 62 views
1

我想知道sql server存儲過程的默認權限是什麼。 例如,我創建了數據庫中的用戶,但沒有任何作用或授予的除了像執行權限沒有權限:創建一個存儲過程,使剛剛從選擇上我sql server默認過程權限

GRANT EXECUTE ON SCHEMA :: [dbo] TO [newUser] 

後(爲SA登錄)表所示:

CREATE PROCEDURE dbo.selectX AS 
BEGIN 
SELECT ID, NAME FROM MyTable 
END 

和我的用戶[NEWUSER]可以執行並看到類似的SELECT語句的結果:

EXEC dbo.selectX 

直到現在,我可以假定存儲過程具有我的用戶沒有的默認權限。 我試過其他dmls,如UPDATE,INSERT,DELETE和用戶管理成功執行過程。 但是!當我創建了DDL作爲創建表proceure ..如:

CREATE PROCEDURE dbo.crtNT AS 
BEGIN 

    CREATE TABLE del(id int) --for test 
END 

當NEWUSER執行此過程發生錯誤一樣:

CREATE TABLE permission denied in database 'MyDb' 

這裏是我的問題:默認情況下,存儲過程是否具有使用DML(選擇,插入,更新vs.)的權限,但是不能使用DDL(創建,刪除表與vs)?因爲我在聯機叢書或其他地方沒有看到關於這種情況的任何解釋。 任何意見將受到歡迎。

回答

1

您在對DDL語句進行不同處理的假設中是正確的。

與DML語句的程序通過Ownership Chaining的工作機制然而從EXECUTE AS文檔這句話指出

記住,所有權鏈接僅適用於DML語句。

+0

由於創建表需要架構級別權限,因此您的解釋和提供的鏈接非常令人滿意。 –