2010-08-10 51 views
1

許多桌面應用程序使用SQL表來管理他們的用戶權限和角色。事實上,它們限制了在應用程序代碼中訪問應用程序的某些部分。這意味着他們需要一個具有最大權限的連接字符串到SQL服務器。什麼是數據庫桌面應用程序權限管理的最佳途徑?

我的目標是C#2010,SQL Server 2005或2008

如果有任何原因,有人發現了什麼是連接字符串?(網絡跟蹤,軟件黑客,前員工或...),他可以改變一切只有管​​理工作室,你無法瞭解哪個客戶端。如果你想改變連接字符串。您必須在許多客戶端執行此操作,並且在您需要重新編譯應用程序的不良設計中。

所以我想知道在表中使用真正的SQL登錄而不是用戶名和密碼是個好主意嗎?通過SQL登錄爲每個用戶建立連接字符串?

這樣就不用擔心鬆動連接字符串。同樣在SQL代碼中,您可以使用GetUser()函數來指示哪個用戶真的毀了查詢?

但是這樣管理權限可能很困難,因爲沒有簡單的表來管理權限和用戶。

在一個長句中。我想知道以管理權限的方式驗證桌面應用程序用戶的最佳方式是什麼以及sql server可以記錄用戶活動?

回答

1

只要有可能,請使用Windows身份驗證。

定義角色。將組添加到角色。將用戶添加到組(按照通常的Windows管理文件系統權限的方式)。

Choosing an Authentication Mode

參見:Application Roles

+0

Windows身份驗證意味着每個可能的用戶都需要添加到數據庫中。在這種情況下不是一個非常易於維護的解決方案... – jeroenh 2010-08-10 10:09:18

+2

@jeroenh:SQL上的Windows身份驗證可以使用安全組。您不必逐個添加每個用戶(並且許多組織已經具有定義的合適組)。 – 2010-08-10 10:21:18

0

您可以加密你的app.config文件的敏感部分。上次我檢查時,你必須經歷一些環節,但這並不難。

見例如this question

+0

只要您失去對軟件執行環境的控制權,就不能保密,因爲您的應用程序知道的所有內容都可以被攻擊者訪問。例如,通過使用調試器,或通過使進程核心轉儲。你只能讓它難以脫身。 – MauganRa 2016-06-15 13:10:19

0

爲了獲得最佳的安全性,需要每個用戶一個專用數據庫帳戶;每個帳戶只應具有相應用戶可能執行的任務所需的特權。通常您授予角色權限(例如「職員」,「經理」,「主管」)並將這些角色授予用戶。顯然,它需要一些工作來確定每個角色需要哪些權限。在很多情況下,可能有必要不允許直接訪問某些表,但僅限於隱藏某些不應該對該角色可見的部分的數據庫視圖,或者不允許執行一些額外檢查的存儲過程,並確保每個事務作爲一個整體進行處理。

相關問題