每个物理用户将在数据库中有大约20个表。
当新用户注册时,将创建另外20个表,仅对其新的MySQL帐户具有访问权限。
数据不必在用户之间共享。
这一逻辑是否比所有用户仅拥有20个表更安全?表演会死还是不死呢?
我只想确定一个喜欢“玩”注入和找到方法的用户将无法访问其他用户数据。
发布于 2012-08-08 12:17:59
这是一个糟糕的设计(或者根本没有设计)。
您应该像在面向对象编程中创建类一样对表进行建模:每个类/表代表一个概念,因此您应该为每个用户拥有一个用户表和对其他表的一些权限。
梅丽斯是设计数据库的一种很好的方法(更重要的是它现在主要用于数据库的设计)。恐怕这是一个法国文化的例外,因为似乎没有其他国家使用它,但如果你能找到你的语言资源,这将对你的设计有很大帮助。
发布于 2012-08-08 16:20:15
由于这是security.stackexchange.com,我将重点讨论安全问题。(我同意其他海报/评论:对于长期的可维护性来说,这通常不是一个好的设计。这可能对性能不好,但如果不知道用户--包括您,管理员--是如何查询它的,这是不可能的。)
从安全POV中,将用户数据分离到MySQL中的不同表只有在您还为MySQL中的每个用户设置单独的用户帐户,然后显式地设置他们的权限以便他们只能访问这些表时才会有好处。此时,权限变得非常混乱,难以跟踪、验证和更正,但它将减少SQL注入攻击的风险。
从概念上讲,给每个用户自己的模式(或MySQL术语中的“数据库”)并赋予他们对整个模式的特权在概念上会更容易一些。这使得特权更易于审计,并且仍然降低了SQL注入的风险。
后一种概念并不完全疯狂--许多服务器都是这样配置的,以便在同一台服务器上运行几个不同的数据库支持的应用程序,而不允许它们访问彼此的数据。在您的情况下,这是否有意义在很大程度上取决于您有多少用户。
我不是赞成你的设计,只是指出正反两方面。
https://security.stackexchange.com/questions/18294
复制相似问题