2012-03-13 121 views
1

我有一個.NET應用程序連接到SQL Server 2008以存儲一些數據。我在app.config文件中給我的最終用戶提供了一個sq用戶名和密碼。如果需要更多的東西,我會給最終用戶一些其他憑據。對SQL Server用戶的有限權限

我該如何限制sql用戶只有權限讀/寫數據並執行現有的存儲過程和其他所有被禁止的操作? 爲應用程序用於連接數據庫的sql用戶設置權限的最佳做法是什麼?我能否以某種方式阻止用戶登錄Management Studio並弄亂我的數據? 我不是在尋找完美的100%可靠的解決方案,而是最好的現有做法。非常感謝你提前。

更新:我工作在一個共享的託管SQL Server環境。

回答

4

您需要創建一個新的SQL用戶,如'LimitedUser'。要在SSMS中執行此操作,請選擇您使用的服務器的安全文件夾,右鍵單擊,選擇新建,選擇登錄。

選擇您的身份驗證類型(SQL服務器身份驗證很容易管理),並將默認數據庫設置爲您的數據庫。

您需要設置服務器角色,以便此新用戶只映射到您的數據庫,並在最後一頁(狀態)中將登錄設置爲false,以便他們無法使用這些憑據登錄到SSMS並「數據'。

單擊確定,完成創建有限的用戶。

將其分配給您的數據庫,然後在SSMS中,右鍵單擊您的數據庫,選擇屬性,權限。

選擇您的用戶或角色,並在下面的權限網格中,只打開需要打開的內容。

+0

或者,您可以使用'grant'語句。 – Colin 2012-03-13 06:56:16

+0

這的確如此,科林! – callisto 2012-03-13 06:59:06

+0

我只能創建一個用戶,而不是登錄。我正在連接到共享的託管SQL Server環境。如果您可以調整創建SQL用戶的步驟,那將非常棒。 – 2012-03-13 17:53:20

0

正如我所看到的,您的問題完全關注SQL Server安全性。

您可以使用GRANT語句,服務器或database roles來限制服務器,數據庫或對象作用域上的用戶權限。例如,您可以爲用戶分配db_datareader角色,然後爲某個存儲過程(或整個數據庫)授予此用戶的EXECUTE權限。

我組織目前的做法是創建數據庫角色(例如應用程序管理員,操作員等),爲這些角色添加適當的權限,然後將這些角色分配給數據庫用戶。

我並不完全確定您可以阻止登錄到SQL Server Managent studio(SSMS),但SSMS將不會顯示用戶具有用戶當前權限時必須隱藏的信息。

0

共享SQL Server託管,其中單個實例在多個客戶之間共享與典型的客戶端 - 服務器應用程序不兼容。您需要通過WCF數據服務等中間層服務器執行所有操作,並使用表單身份驗證等方式將您的數據庫中的用戶帳戶維護在表格中。

對於您的客戶端 - 服務器應用程序,您需要VPS託管您自己的實例的SQL服務器,您可以在其中創建服務器級登錄。在不創建服務器級別登錄的情況下,可以使用方法來保護客戶端 - 服務器應用程序。任何解決方法都只是僞安全性。