添加论坛:共享数据库还是创建新数据库?

时间:2011-04-21 01:41:43

标签: mysql database security database-design forum

我的网站有一个包含大约50个表的MySQL数据库。我努力使其尽可能安全可靠。

根据我们的发展计划,我们将在不久的将来增加一个论坛。

我不确定将论坛放在自己的数据库中,或者将其所有表插入现有数据库是否更好。我已经列出了以下两种方法的优点和缺点,我理解它们,并希望得到一些比我更有知识和经验的建议,几乎所有人: - )

合并到现有数据库

赞成

  • 将论坛数据集成到现有网站更容易(例如:使用论坛帖子标记将线程与网站页面匹配并自动显示相关讨论的链接)
  • 可以将现有用户表合并到论坛中,因此用户无需重新注册即可开始使用论坛
  • 一体化备份

缺点

  • 我立即添加了大量新代码,其中一些代码具有数据库访问权限,而且所有这些代码都是恶作剧的目标,这意味着我的原始数据库现在处于更大的攻击风险
  • 更新论坛软件将更加亲力亲为,因为它不会是一个直接的数据库翻牌

论坛和主站点的单独数据库

赞成

  • 轻松安装,测试,升级,拆除论坛
  • 论坛数据库安全漏洞不会使我的主站点面临风险(反之亦然)

缺点

  • 集成到现有站点需要一次查询两个数据库。我怀疑编程会相当困难。
  • 用户必须在论坛上重新注册
  • 备份2个数据库而不是一个(这是一个小问题,但它是一个骗局)

你的想法? : - )

3 个答案:

答案 0 :(得分:1)

从2个数据库中查询:

select db1.a.field1, db2.b.field2 from db1.a
inner join db2.b on (db1.a.id = db2.b.id);

只需确保您的连接字符串可以访问两个数据库 两个数据库都需要在同一台机器上。

答案 1 :(得分:0)

我证明了自己的方法是:

  1. 将论坛安装为单独的系统
  2. 写一个薄层来共享登录(如果两者都使用开放id或类似的东西,请高兴)
  3. 随着时间的推移,我慢慢地小心地合并两个有意义的系统,通常不会。我喜欢使用视图在两个数据库之间共享数据。

答案 2 :(得分:0)

合并到现有数据库中 优点

  1. 将论坛数据集成到现有网站更容易.. [ nope 。从编码的角度来看,在一个数据库上运行查询与另一个数据库之间没有任何区别。此外,您的查询本身可以跨数据库。]

  2. 可以将现有用户表合并到论坛中,因此用户无需重新注册即可开始使用论坛。 [<强>都能跟得上即可。是的,您可以这样做,但即使论坛表不在此数据库中,您也可以这样做。所以这是洗漱]

  3. 一体化备份。 [我认为你在这里抓紧。无论是一个数据库还是两个数据库,备份程序都是一样的。唯一的区别是你有1或2个文件]

  4. 缺点

    1. 我已经立即添加了大量的新代码,其中一些代码具有数据库访问权限,而且所有这些代码都是恶作剧的目标,这意味着我的原始数据库现在面临的风险更大攻击。 [<强>也许即可。如果新代码使用动态sql,和/或无法使用参数化查询,那么它无论如何都会被搞砸。此外,如果您的数据层允许用户在完全访问您的服务器的情况下执行查询,这对于大多数应用程序来说似乎都是标准的,那么表是否在同一个数据库中并不重要。有趣的是,MySql网站在一个月前就以这种方式破解了。]

    2. 更新论坛软件将更加亲力亲为,因为它不会是直接的数据库翻牌。 [我不完全确定你的意思。我从未听过在这种情况下使用的“翻牌”一词。]

    3. 论坛和主站点的单独数据库 优点

      1. 轻松安装,测试,升级,拆除论坛[否.. 无论数据库存在多少,您都会遇到同样的问题]

      2. 论坛数据库安全漏洞不会使我的主站点处于危险之中(反之亦然)。 [取决于关于洞的类型以及确切实施安全性的方式]

      3. 缺点

        1. 集成到现有站点需要一次查询两个数据库。我怀疑编程会相当困难。 [不是。它具有完全相同的复杂程度。您的查询也可以跨数据库。]

        2. 用户必须在论坛上重新注册[ Nope。您可以在其他表中重复使用相同的用户表]

        3. 备份2个数据库而不是一个(这是次要的,但它是一个骗局)。 [我不同意,但我们的服务器上又有数十个数据库,所有备份都是自动化的。哎呀,一旦我们创建一个维护计划,就会自动将其添加到夜间备份计划中,所以甚至都没想到。]

        4. 坦率地说,我认为唯一可能的问题是新论坛内容如何访问数据库,以及该帐户为完成其工​​作所需的用户权限。如果做得好,则没有问题;但如果它完成了方式错误,那么唯一真正的保护就是将论坛软件放在它自己的数据库服务器上......即便如此,它也可能导致问题。

          但这应该通过适当的安全审核来确定。