2010-08-03 73 views
1

我的問題與this question非常相似,但更具體一點。多公司的Web應用程序數據庫安全

我的應用程序有多個公司和多個用戶每公司。對我來說最重要的是(在這一點上)每個公司都有一套「私人」的表格。這使得安全性非常簡單,因爲我不必擔心加入我的結構樹,以確保我只能獲取特定公司的數據。我還可以擴展mysqli數據庫擴展,並讓它在查詢中的表名上放置一個前綴,這樣我就不必在編寫查詢時擔心安全問題。

我能看到的另一個主要優勢是,如果其中一家公司需要定製,我可以修改其特定表格,而不必考慮其他人。我的應用程序的設計方式非常模塊化,實現自定義代碼非常簡單。

我可以看到一些缺點,但到目前爲止似乎上述優點會超過它們。上面提出的系統對我的(可能)超規範化的數據庫模式偏好進行排序,直到此時爲止。另一個明顯的缺點是實現架構變更,但我可以編寫腳本並且足夠安全。我不確定的一點是表現。如果我有MySQL與這麼多表一起工作,我會爲自己製造瓶頸嗎?

我期待着你的想法!

+0

您是否有任何需要在'meta'級別進行查詢,即爲您自己的內部報告彙總統計信息? – Paddy 2010-08-03 14:30:53

回答

4

您的建議對我來說聽起來很合理。我建議不要在公司名稱前面加上前綴,而要將每個公司的表格存儲在一個單獨的模式中。這樣你就可以擁有同名的表格,減少代碼中的問題,並且可以方便地使用不同的用戶名和密碼保護每一組表格。備份和複製將在需要時全部區分。

查找表可以存儲在所有用戶都可以訪問的另一個模式中。

+0

又名「數據庫標準化」。這也將簡化稍後可能會發生的變化,並且易於維護。 – Matthew 2010-08-03 14:30:23

+0

是否有任何性能問題需要考慮將數據放入單獨的數據庫中,因爲這些數據與同一數據庫中的許多表相關聯?打開一個新的數據庫連接是否有損失? – Icode4food 2010-08-03 14:48:18

+0

單獨的邏輯模式('數據庫')全部駐留在同一個MySQL物理數據庫中,因此不存在。實際上,由於您可以分別指定不同的存儲特性,因此可以通過在存儲區域,磁盤等之間切換模式來消除性能問題。 – 2010-08-03 15:03:50