2016-07-22 52 views
0

我有一個應用程序,我們希望提供使用哪些用戶可以添加/更新/刪除不同表的列的功能。我的方法是爲每個客戶端創建一個不同的數據庫,以便他們對特定於表的更改將保留在其數據庫中。在SQL Server中爲每個客戶端創建不同的數據庫是個好主意嗎?

由於每個客戶端都有自己的數據庫,我不知道如何管理認證和授權?我是否還需要爲此創建不同的數據庫?它會影響應用程序的性能嗎?

編輯:我打算用於身份驗證和授權的方法是在登錄頁面上創建一個名爲「Account」的附加字段。此帳戶名稱將指導程序將其連接到正確的數據庫。每個數據庫都有它自己的用戶進行身份驗證。

+1

爲每個客戶端創建一個模式並讓該客戶端特定的用戶分配到該模式 – TheGameiswar

+0

關於您的編輯。是的,你可以做到這一點。但是你可以使用子域名。 Client1.Yourdomain.com將在他們的數據庫Client2.Yourdomain.com上對他們的數據庫進行身份驗證。 – Matt

回答

1

的回答你的問題當然是(不幸)Yes和No. :)

這被稱爲多租戶數據架構。

擁有單獨的數據庫絕對是一個很好的設計選項,但是可以使用與所有客戶/客戶共享的一個數據庫,並且在選擇前需要考慮很多因素。

每個設計都有其優缺點。

這是你的3個必需選擇

1)每個客戶共享同一個數據庫和數據庫表。

2)每個客戶共享相同的數據庫,但他們在數據庫中獲得自己的模式,以便他們各自獲得自己的一組表。

3)每個客戶都有自己的數據庫。

單獨數據庫方法的一個主要優點是(我真的很喜歡)是數據安全性。我的意思是每個客戶都有自己的數據庫,因此他們將編輯/更新/刪除他們的數據庫。因此,最終用戶不會因爲程序錯誤或應用程序中的安全漏洞而覆蓋其他用戶數據。

當所有用戶都在同一個數據庫中時,您可能會意外地拉出並暴露其他客戶數據。或者,更糟糕的是,您可能會在屏幕上顯示一個主鍵到記錄,並忘記妥善保護它,並且高級用戶可以非常輕鬆地將該關鍵字覆蓋到屬於另一個客戶的關鍵字,從而暴露另一個客戶端數據。

但是,可以說所有客戶實際上都是1家大公司的補貼,並且您需要每天/每週/每月/每年等級彙總財務數據等。 如果是這種情況,那麼每個數據庫都有一個數據庫客戶端可能是一個報告噩夢,讓每個人都在一個數據庫中共享表格會讓生活變得更容易。例如,當需要報告日常銷售情況時,更容易總結一列,然後轉至10,000個數據庫並對其進行總結。 :)

所以答案肯定取決於你的應用和它將會做什麼。

我在一個大型企業系統上工作,我們在同一個數據庫中有數以萬計的客戶端,爲了支持這一點,我們非常謹慎地確保所有數據的安全。

我也在空餘時間工作在一個側面項目上,它支持每個客戶多租戶架構的數據庫。

因此,考慮你的應用程序將做什麼,你將如何備份你的數據,你需要捲起數據等,這將幫助你決定。

繼承人MSDN上格雷亞文章如下: https://msdn.microsoft.com/en-us/library/aa479086.aspx

關於你提到的有關驗證問題。

是的,有一個單獨的數據庫進行身份驗證是一個偉大的設計。當客戶進行身份驗證時,您會從身份驗證數據庫驗證它們,並且將作爲此身份驗證的一部分接收連接到數據庫的連接字符串。然後,來自該點的所有數據都來自該客戶數據庫。

希望這有幫助。 祝你好運!

+0

男士,非常感謝您的詳細信息。這正是我的想法。爲什麼我選擇「多租戶架構」是因爲每個客戶端都可以更改多個表的架構。是的,我必須爲所有客戶端提供該功能,並且爲單個數據庫中的所有客戶端管理已更改的模式是比報告更大的噩夢。請檢查我的更新問題,我的方法進行身份驗證並建議。 – user728630

相關問題