2012-06-18 185 views
10

我的應用程序(C#,ASP.Net)需要插入,更新和刪除數據庫中的數據,並運行存儲過程。我需要阻止它修改數據庫模式 - 不改變表,創建或刪除,不更改存儲過程。如何允許SQL Server用戶插入/更新/刪除數據,但不允許更改模式?

我需要授予應用程序用戶什麼權限組合?只是'選擇'不會起作用,因爲它需要在表格中插入/更新/刪除數據。

如何檢查特定登錄的權限和訪問權限? 如何授予或拒絕登錄權限和訪問權限? 我需要爲新用戶(登錄)授予權限才能訪問一個數據庫。

使用SQL Server 2008 R2和SSMS。

回答

18

如果你真的想在對象級別來控制這一點,你可以這樣做:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

在模式級別:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

理想的情況是,你不會允許特設DML針對您的表格,並通過存儲過程控制所有DML。在這種情況下,你只需要授予的程序本身EXEC,而不是對象倒是:

GRANT EXEC ON dbo.procedure TO user; 

同樣的,如果你想允許在特定模式下的所有程序EXEC,你可以說:

GRANT EXEC ON SCHEMA::dbo TO user; 

一個例外是當你的存儲過程組成動態SQL時。在這些情況下,您可能仍需要在動態SQL執行的上下文中對基礎表應用權限,或者您可以使用EXECUTE AS OWNER

+0

將授予'更新'和'刪除'權限允許該用戶更改和刪除表?另外,我可以授予模式權限,而不是每個表? – jprusakova

+1

不,更新和刪除是指表中的數據,而不是數據本身。你總是可以試試這個。是的,我發佈了一個可以影響架構而不是每個對象的示例(如果您稍後添加表,那麼權限會被繼承,除非您想添加用戶*無法訪問的表,那麼你需要在該表上明確拒絕)。 –

+0

謝謝,這有幫助! – jprusakova