2013-05-28 53 views
3

我想使用SQL Server應用程序角色我讀過關於微軟MSDN網站上的以下內容: http://msdn.microsoft.com/en-us/library/ms190998.aspxSQL Server應用程序角色

與應用程序角色 以下步驟組成的過程中通過連接其中應用程序角色切換安全上下文:

用戶執行客戶端應用程序。

客戶端應用程序以用戶身份連接到SQL Server的實例。

然後,應用程序執行sp_setapprole存儲過程時僅使用應用程序已知的密碼。

如果應用程序角色名稱和密碼有效,則啓用應用程序角色。

此時連接將失去用戶的權限並承擔應用程序角色的權限。

我想知道,如果應用程序必須知道密碼,如何最好地實現這一點。我會假設在源代碼中存儲密碼是一種安全風險。是否有另一種安全的方式來與應用程序一起部署密碼(請注意,這是一個將部署到用戶機器的Windows客戶端應用程序)。

回答

0

無法在用戶工作站上部署密碼而無需本地管理員發現密碼。你只能提高酒吧如此之高,但如果價格是值得的,他們會找到它。

您應該依賴用戶提供的密碼,如果可能的話,最終歸結爲使用Windows身份驗證。您應該始終假定應用程序擁有的任何特權,用戶都擁有它們,並且他/她可以使用其他訪問API(即任何查詢工具)來鍛鍊它們。如果您不能以某些特權信任用戶,那麼您不得在他/她的計算機上部署應用程序。例如,使用一個多層解決方案,將數據庫與用戶隔離開來,並在該中間層中添加任何必要的驗證(大多數ASP.Net和/或WCF應用程序在適當的情況下可以像這樣的多層次一樣)。

2

實際上有另一種方式來與應用程序一起部署密碼。

您可以將密碼作爲祕密存儲在數據庫本身中。

例如,使用存儲過程或標量函數返回這個「祕密」。這是您描述的邏輯中的一個額外步驟,在應用程序使用用戶憑證進行連接之後立即執行。

這是可能的,因爲用戶無論如何都可以使用Windows身份驗證訪問數據庫。 需要設置權限,以便授予用戶連接到數據庫和可編程對象的權限只有。要對密碼進行「模糊處理」(NOT安全)密碼,您可以在數據庫中存儲加密版本,並使用簡單的加密/解密(如this one)。

這種方法具有以下優點:

  • 的密碼不以明文保存的任何地方(請注意,雖然,它會以明文形式傳播到網絡上,如果你不使用SSL加密)
  • 該應用程序的用戶
  • 不需要提供任何輸入
  • 的應用程序源代碼不包含密碼
  • 的應用程序部署不包括密碼
  • 密碼可以很容易地重置,例如按照時間表