2014-12-02 82 views
0

对于正在使用沙箱模式的站点(如付款站点),是否会使用单独的数据库,还是使用同一个数据库?隔离沙箱环境

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

选项1:

  • 克隆数据库,将请求路由到基于​​模式正确的数据库。

OPTION 2

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

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

回答

1

在大多数情况下,您希望保留两个单独的数据库。有没有很好的理由有两个在同一数据库中混,和很多很好的理由,让他们分开:

  • 跟踪哪个实体中“的境界”(生产与沙盒)对于你的代码来说是额外的工作,你可能必须将它包含在很多地方。

  • 您在数据库模式中也需要该逻辑。例如,指数都必须包含领域。

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

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

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

例外:如果您的应用程序是一个几乎完全的公共网站(例如,像堆栈溢出或维基百科),或涉及社会方面难以复制在沙箱中(如Facebook),集成度更高沙箱可以使更有意义。