2011-01-05 154 views
3

我們有一個應用程序使用Windows身份驗證向數據庫用戶進行身份驗證,並且SQL Server用戶帳戶需要對數據庫表具有某些讀/寫訪問權限。SQL Server Windows身份驗證安全

問題是用戶可以安裝SQL Server Management Studio,並可能以不應該使用的方式使用數據庫,這不是我想要的。

我讀過的所有內容都表明,使用集成身份驗證更安全,但目前任何用戶都可以使用Management Studio或Access/Excel來連接數據庫。

我已閱讀問題SQL Server Authentication or Integrated Security?,其中提出了一些解決方法,但我沒有真正選擇將應用程序更改爲重新分解所有存儲過程等,所以我希望可能有另一種選擇?

謝謝

尼科

回答

2
我已閱讀

一切說 使用集成的身份驗證是 更安全

- >這在某種程度上更安全​​,因爲它更難以得到密碼。

如果您使用SQL Server身份驗證,則連接字符串將包含用戶名和密碼。如果您知道連接字符串的位置(通常位於配置文件中),則可以將其打開並查看用戶和密碼。另一方面,如果您使用Windows身份驗證,則連接字符串只會顯示「Integrated Security = True」,並且您使用Windows帳戶連接到服務器,實際密碼被埋在Windows內部深處的某處,並且更難檢索。

當然,Windows身份驗證的一大缺點是,如果您的用戶需要爲您的應用程序在某個表上寫入權限,這意味着他們可以使用任何其他應用程序寫入同一個表。

有一些解決辦法,但他們都不是銀彈:

如果您的應用程序只需要數據庫的某些表,你可以只給出這些權限。所以,至少,用戶不能在所有其他表

如果用戶不允許訪問任何表從應用程序之外的所有做的東西,也有不幸的是只有兩件事情可以做:

  • 將您的應用更改爲SQL身份驗證並刪除Windows用戶的所有權限
    (您也可以使用代理服務like Will Hughes suggested,但效果與應用直接訪問數據庫時相同...問題在於您的用戶'Windows帳戶沒有任何權限了!)
  • 創建視圖和存儲過程(如果它們還沒有存在)用於應用程序可以對數據庫執行的操作。授予用戶使用這些權限的權限,並刪除對真實表的權限。
    - >用戶可以直接使用其他工具訪問視圖和SP(即使他們對基礎表沒有任何權限...對視圖和SP的權限就足夠了),但他們無法做到他們無法在您的應用中執行任何操作。
+0

你如何賦予存儲過程寫入數據庫的權限?它不承擔呼叫者的權利嗎? – noelicus 2013-10-15 14:58:37

+0

SP始終能夠寫入數據庫。但是,如果你允許他(通過給予他'EXECUTE'權限),用戶只能執行SP。 [請參閱此MSDN鏈接](http://msdn.microsoft.com/en-us/library/bb669058.aspx)以獲取更多信息。 – 2013-10-15 19:08:32

0

如果你不希望用戶能夠訪問你的數據庫,不授予他們訪問。

如果你需要控制他們可以做什麼 - 那麼你應該做一個web服務的訪問控制(或代理服務的一些其他形式),然後將執行批准的查詢,返回數據等