对于使用沙盒模式的网站,例如付款网站,是使用单独的数据库,还是使用相同的数据库?
我正在检查生产和沙箱环境的两个模式。以下是两个选项。
选项1:
sandbox
模式将请求路由到正确的数据库。选项2
is_sandbox
布尔值。每种方法的优点和缺点是什么?
答案 0 :(得分:1)
在大多数情况下,您需要保留两个单独的数据库。将两者混合在同一个数据库中是没有充分理由的,并且有很多很好的理由让它们分开:
跟踪哪些实体位于哪个“领域”(生产与沙箱)对您的代码来说是额外的工作,并且您可能必须将它包含在很多地方。
< / LI>您也需要在数据库模式中使用该逻辑。例如,UNIQUE
个索引都必须包含领域。
如果您忘记了任何代码,您就会遇到潜在的安全漏洞。恶意用户可能会导致来自一个领域的数据影响另一个领域。根据您的应用程序的不同,这可能在烦人到可怕的范围内。 (例如,如果它是支付应用程序,潜在的后果非常可怕:“假装”沙盒中的钱可以转换成真钱!)
即使您的代码完美无缺,仍然会在这些领域之间不可避免地泄露一些信息。例如,如果您的应用程序使用任何顺序标识符(例如,MySQL中的AUTO_INCREMENT
),则沙箱中显示的值的间隔将与生产中使用的值相对应。但这是否重要是值得商榷的。
使用两个独立的数据库可以很好地解决所有这些问题。这也意味着您可以在需要时轻松清理沙箱。
例外:如果您的应用程序几乎完全是公共网站(例如Stack Overflow或Wikipedia),或涉及难以在沙盒中复制的社交方面(如Facebook),则更多集成的沙箱可能更有意义。