数据库设计麻烦。每个用户的表格

时间:2013-04-17 10:12:23

标签: php mysql security codeigniter

首先,我知道问题已在stackoverflow上讨论herehere。但是这种情况可能会有所不同。

让我解释一下情况:

老板希望我和我的同事开发一个网络应用程序,在那里他可以添加客户(阅读公司,现在表格'用户')。 每个用户都会在应用程序中拥有自己的私人部分,在那里他可以管理他的股票/账单/付款/订单/ ......他们甚至可以选择询问不同的模块/菜单项/视图/ ..他们的私人部分 我们的老板必须能够通过检查主控制部分中的选项来添加/删除一些模块/视图/ .. 等等......

我的第一个想法是为每个用户提供一个主模块。我的同事抛弃了这个想法。他认为这太过分了 但是,当我们开始设计数据库时,他说他希望每个用户都拥有数据库中的大多数表格。
我知道这是不好的做法,并试图解释。 然而他表示,如果我们将所有内容保存在同一个表格中,那将是不安全的。 (如果我们被黑了,他们不仅会有一家公司的数据,而是来自所有公司的数据
讨论花了一些时间,最后他的“点”'''''''''''''甚至让我们的老板相信他的方法。

由于我是这里的新人,如果没有确定,如果his statement === false

,我就不想坚持这个

所以,我希望你对此有所了解。

  • 安全性如何
  • 每家公司的个性化方式
  • 如何管理数据库
  • 是否有人有类似的项目
  • 如何使用不同的模块'对于每个公司(如我的第一个想法)
  • ...(实际上所有信息都说服他们很好,但我觉得我必须带来一个很好的选择)

提前致谢

1 个答案:

答案 0 :(得分:6)

这在某种程度上是个人意见的问题。但有些事情并不是好的做法。以下是我对这些观点的看法:

在同一个表中拥有多个“用户”不应该构成安全风险。

  • 如果有人有权访问您的数据库,则无论存储在何处,他都拥有所有数据。
  • 您的应用必须确保通过过滤和验证的WHERE条件,用户无论如何都只能访问他的行,或者您的应用在SQL注入之前的其他级别上会出现严重的安全问题
  • 如果每个用户都有一个表,那么在将应用扩展到新用户,管理旧用户或删除它们时会遇到很多麻烦。
  • 如果您必须从多个用户收集数据,性能将非常糟糕
  • 大多数数据库中有最大数量的表,具体取决于许多因素。我不知道你需要存储多少用户但要牢记这一点

将用户分离到自己的表中的解决方案听起来就像是在跳过开发可靠且安全的数据模型所需的时间。这通常会在您的应用程序的后期开发或维护过程中导致许多问题。我强烈反对这一点。

经验法则应该是每个对象类型使用一个表,而不是每个对象实体。