2010-11-21 71 views
2

我一直想知道爲什麼數據庫角色列表(db_datareader,db_datawriter,​​等)從未包含db_storedprocedureexecutor。其他人是有道理的,但它似乎能夠授予執行所有存儲特效到一個特定用戶(不授予他們,這是唯一的其他方式來完成相同的事情)的能力將是一個方便的事情。例如,假設我想讓我的所有開發人員都有權運行存儲過程,但不讓他們執行任何DDL - 如果沒有在每個存儲過程中明確授予EXECUTE(然後記住在添加新的存儲過程時添加新的DDL) SP部署),沒有辦法做到這一點(我知道SP可以包含DDL,因此它們仍然可以通過這種方式間接地被允許訪問DDL)。爲什麼沒有內置的「存儲過程執行器」數據庫角色?

如果我有一個應用程序服務帳戶和一些與我的應用程序一起存儲的過程,我必須明確授予每個SP的權限(因爲我不想授予我的應用程序服務帳戶DBO),而我可以使用角色來允許他們更新/刪除他們想要的任何內容。雖然最初看起來很明顯,但我現在不確定爲什麼數據庫服務器中缺少這個角色 - 有沒有人可以解釋爲什麼這是一個可怕的想法(正如我假設的那樣,或者它已經存在)?

編輯:

看來我不是唯一一個有這種期望 - 和it's worked around with a handful of T-SQL(似乎可以授予毯子EXECUTE權,這我不知道,你可以這樣做),這只是讓我想知道爲什麼它不是標準!

+2

我也是!我們基本上創建了自己的'db_executor'角色,模仿'db_datareader'來解決這個問題。但是:爲什麼不在SQL Server基礎包中?不知道....一樣:爲什麼有一個'sys.procedures'目錄視圖,但沒有'sys.functions'一個......讓你走的東西:嗯........ – 2010-11-21 19:34:52

回答

3

如果使用模式,那麼你只需要GRANT EXECUTE ON SCHEMA::storedprocschema

CREATE PROC storedprocschema.DoStuff ...

至於爲什麼,不知道...

+1

我們目前只使用DBO,所以此步驟並不適用,因爲我可以執行「GRANT EXECUTE T​​O User」補助金在dbo中執行。然而,我明白你在說什麼 - 使用你的方法,我們可以隔離我們希望應用程序用戶有權訪問的SP,然後在整個模式上進行GRANT EXECUTE。有趣的想法! – SqlRyan 2010-11-22 05:39:24

+1

@rwmnau:我們已經爲每個客戶端完成了它:WebGui,Desktop,ThisSystem,ThatSystem等數據表。內部procs在助手等等等我也不得不問 - [this](http://stackoverflow.com/questions/2212044/sql-server-how-to-permission-schemas)瞭解它... – gbn 2010-11-22 07:13:59

-1

因爲如果您可以執行所有存儲過程,則可以執行sp_addrolemember,並且您可以完成database_owner可以執行的所有操作。

+0

對不起,不對。您需要[db_securityadmin](http://msdn.microsoft.com/en-us/library/ms188685%28SQL.90%29.aspx)運行[sp_addrolemember](http://msdn.microsoft.com/ en-us/library/ms187750%28SQL.90%29.aspx)請參閱「權限」部分 – gbn 2010-11-21 19:26:03

相關問題