2012-02-02 22 views
1

我有一種情況,我想使用數據庫對象的權限,但不允許足夠聰明的用戶通過excel和訪問來操作數據。我們希望要求用戶通過我們的Web應用程序建立連接,這確保了數據在一個地方的驗證。有沒有辦法確保用戶與數據庫建立連接並具有允許他通過Web應用程序插入,更新或刪除的權限集?EntityFramework最佳實踐RE:數據庫安全

如果沒有A方式,那麼您在處理這種情況時如何處理這種情況,而無需使用Web應用程序連接的主用戶?

+0

不要給你的用戶訪問數據庫。爲網站提供單一數據庫登錄。 – TGnat 2012-02-02 18:53:21

+0

請閱讀最後一句。 – bdparrish 2012-02-02 19:15:14

回答

1

您可以使用大多數系統所做的主帳戶,因爲如果您想使用其他層(您的Web應用程序)進行數據驗證,規則檢查等,則沒有理由讓用戶訪問數據庫。這就是一種不允許用戶直接訪問數據庫的方式。

一旦你允許用戶訪問數據庫,他可以做任何他允許的任何事情。沒有什麼會阻止用戶直接訪問數據庫。此外,如果您在Web應用程序中不使用主帳戶,則必須通過Web應用程序委派用戶(如果數據庫服務器與Web應用程序不在同一臺機器上,則需要Windows域和Kerberos)。該代表團將爲您的用戶在您的應用程序中爲用戶提供與您的應用程序完全相同的權限。

+0

我知道這不是處理DbContext時最正確的方法,但是由於我的客戶和他們的客戶之間有MOA,我可以使用'context.Database.ExecuteSqlCommand()'來發送一個實體到數據庫,以允許使用StoreProcedures來降低用戶能夠插入,更新或刪除的風險? – bdparrish 2012-02-03 14:35:22

+0

但是,從您的應用程序連接到數據庫將使用哪個帳戶?如果應用程序主帳戶,您可以使用任何你想要的。如果用戶帳戶,您仍然不能解決主要問題。用戶必須擁有執行每一個存儲過程和選擇數據的權限(否則你不能使用LINQ查詢),並且能夠在沒有你的應用程序的情況下做到這一點。所以一般來說,爲了確保所有驗證,您必須將所有邏輯和驗證移至存儲過程。 – 2012-02-03 14:56:18

+0

是的,你是正確的,將直接授予用戶數據庫層的權限。我的解決方案是,由於存儲過程的名稱和參數不會公開,這意味着用戶更可能無法執行插入,更新或刪除功能,因爲該應用程序是內聯網應用程序,所有用戶都是內部的。我發現的唯一的其他選擇是執行登錄觸發器,但必須進行額外交易的數量並不能衡量風險。 – bdparrish 2012-02-03 15:10:59