2014-12-02 87 views
0

對於正在使用沙箱模式的站點(如付款站點),是否會使用單獨的數據庫,還是使用同一個數據庫?隔離沙箱環境

我正在研究生產和沙箱環境的兩個模式。以下是兩個選項。

選項1:

  • 克隆數據庫,將請求路由到基於​​模式正確的數據庫。

OPTION 2

  • 單數據庫, '主表' 具有is_sandbox布爾值。

每種方法的優缺點是什麼?

回答

1

在大多數情況下,您希望保留兩個單獨的數據庫。有沒有很好的理由有兩個在同一數據庫中混,和很多很好的理由,讓他們分開:

  • 跟蹤哪個實體中「的境界」(生產與沙盒)對於你的代碼來說是額外的工作,你可能必須將它包含在很多地方。

  • 您在數據庫模式中也需要該邏輯。例如,指數都必須包含領域。

  • 如果您忘記了任何代碼,您就有自己的潛在安全漏洞。惡意用戶可能會導致來自一個領域的數據影響其他領域。根據你的應用程序的不同,這個範圍可能從煩人到可怕。 (例如,如果是支付應用程序,潛在的後果非常可怕:「假裝」沙盒中的錢可以轉換爲真錢!)

  • 即使您的代碼完美無缺,仍然會有一些信息不可避免地在領域之間泄漏。例如,如果您的應用程序使用任何順序標識符(例如,MySQL中的AUTO_INCREMENT),那麼沙箱中顯示的值的差距將與生產中使用的值相對應。不過這個問題是否值得商榷。

使用兩個獨立的數據庫整齊地解決了所有這些問題。這也意味着您可以在需要時輕鬆清理沙箱。

例外:如果您的應用程序是一個幾乎完全的公共網站(例如,像堆棧溢出或維基百科),或涉及社會方面難以複製在沙箱中(如Facebook),集成度更高沙箱可以使更有意義。