2009-03-06 72 views
1

我的公司正在構建一個ASP.NET HR應用程序,並且我們決定爲每個客戶端創建一個數據庫。這可以確保客戶不會意外查看其他客戶的數據,同時還可以實現簡單的可擴展性(其他益處,已經討論過here)。每個客戶端使用單個數據庫時的用戶身份驗證?

我的問題是 - 在這種情況下處理安全和數據訪問的最佳方式是什麼?我的意圖是使用一個通用的登錄/帳戶數據庫,將用戶引導到正確的服務器/數據庫。這個公共數據庫還將包含每個用戶/角色都可以訪問的應用程序功能。

我並不打算在每個客戶端數據庫中放入任何用戶信息,但我的團隊中的其他人卻認爲每個數據庫缺乏安全性是一個巨大的漏洞(但他們無法闡明如何複製常見訪問邏輯有用)。

我錯過了什麼嗎?我們是否應該在客戶端數據庫級別添加額外的安全/身份驗證層?

更新:
我的一個團隊認爲雙用戶管理的原因是必要的是由於訪問控制。所有用戶都有一個默認角色(例如管理員,最小訪問權限,高級用戶等),但客戶端管理員將能夠改進訪問其數據庫的用戶的權限。對我來說,這似乎是可行的,在一箇中央數據庫,但我的團隊不同意。思考?

回答

2

我一直認爲安全應該在應用程序級而不是數據庫級執行。據說,我認爲你的預期方法沒有問題。通過中央數據庫管理帳戶和角色,從長遠來看,應用程序更易於維護。

1

您可能想要考慮使用ASP.NET membership provider來處理認證管道。這將適用於你陳述的方法,你仍然可以將所有的認證數據保存在一個單獨的數據庫中。但是,我同意Chris的觀點,即保持一個數據庫的可維護性將更高。

3

我們有一個SaaS解決方案,它使用每個客戶端模型的一個數據庫。我們也有一個共同的「安全」數據庫。但是,我們將所有用戶信息存儲在各個客戶端數據庫中。

當用戶登錄到系統時,他們告訴我們三條信息,用戶名,密碼和客戶端ID。客戶端ID用於在「安全」數據庫中查找其主數據庫,然後代碼連接到其主數據庫以檢查其用戶名/密碼。這樣一來,客戶端在數據庫中是完全獨立的。當然,你需要一些超出用戶名的信息來確定他們的主數據庫。可能是我們的客戶端ID方法,或者如果您使用每個客戶端的子域方法,則可能是請求的域名。

這裏的優點是你可以移動「客戶端」數據庫到w/out中,並且必須保持它們與安全數據庫同步。另外,當您嘗試查找用戶信息時,您不需要處理w/cross-db連接。

更新:爲了響應您的更新......每個擁有自己數據庫的客戶的優勢之一就是能夠在客戶真正需要時恢復客戶。如果你已經將客戶的數據分成兩個數據庫,你如何恢復它?另外,如果用戶在主數據庫以外的其他數據庫中定義,則需要擔心跨數據庫訪問。