隔离沙箱环境

时间:2014-12-02 02:23:57

标签: mysql database-design sandbox

对于使用沙盒模式的网站,例如付款网站,是使用单独的数据库,还是使用相同的数据库?

我正在检查生产和沙箱环境的两个模式。以下是两个选项。

选项1:

  • 克隆数据库,根据sandbox模式将请求路由到正确的数据库。

选项2

  • 单个数据库,'主表'有is_sandbox布尔值。

每种方法的优点和缺点是什么?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,您需要保留两个单独的数据库。将两者混合在同一个数据库中是没有充分理由的,并且有很多很好的理由让它们分开:

  • 跟踪哪些实体位于哪个“领域”(生产与沙箱)对您的代码来说是额外的工作,并且您可能必须将它包含在很多地方。

    < / LI>
  • 您也需要在数据库模式中使用该逻辑。例如,UNIQUE个索引都必须包含领域。

  • 如果您忘记了任何代码,您就会遇到潜在的安全漏洞。恶意用户可能会导致来自一个领域的数据影响另一个领域。根据您的应用程序的不同,这可能在烦人到可怕的范围内。 (例如,如果它是支付应用程序,潜在的后果非常可怕:“假装”沙盒中的钱可以转换成真钱!)

  • 即使您的代码完美无缺,仍然会在这些领域之间不可避免地泄露一些信息。例如,如果您的应用程序使用任何顺序标识符(例如,MySQL中的AUTO_INCREMENT),则沙箱中显示的值的间隔将与生产中使用的值相对应。但这是否重要是值得商榷的。

使用两个独立的数据库可以很好地解决所有这些问题。这也意味着您可以在需要时轻松清理沙箱。

例外:如果您的应用程序几乎完全是公共网站(例如Stack Overflow或Wikipedia),或涉及难以在沙盒中复制的社交方面(如Facebook),则更多集成的沙箱可能更有意义。