我有一个用户表,其中包含姓名,电子邮件,密码哈希,性别,城市,教育等所有用户详细信息...总共有45个列。
问题是:我应该将其规范化为两个表,一个用于用户身份验证,即user_id,email,password_hash,password_salt。
还有第二个用于保存用户详细信息的表,还是可以同时存在于1个表中?我不能过多地规范用户细节,因为这是一个关键系统,性能非常重要,因此需要保持较低的连接。
我只关心用于登录身份验证的用户密码/电子邮件是否应位于单独的表中以提高安全性?
答案 0 :(得分:1)
除非这些表以非常不同的方式实现,否则两个表本身不会在一个表上提供额外的安全性。比方说,例如,它们被划分为不同的硬件,密码表具有本机磁盘加密或类似的东西。即便如此,我们还在谈论不同形式的“安全”。这两个表仍处于活动状态并且正在使用中,其中一个表将在静止时加密。 (可能还有其他例子,但这就是我现在所能想到的。)
就个人而言,我倾向于使用两个表,而不是从安全的角度来看,而是从关注点的分离角度来看。一个是身份验证,一个是用户配置文件。在绝大多数情况下,它们不需要分开,但我更喜欢将它们分开,以防万一需要逻辑更改需要它们分开,因为它们在逻辑上不是一回事。
答案 1 :(得分:0)
Symfony的sfGuard使用两个表:一个用于身份验证数据,另一个用于用户详细信息。这看起来很合理 - 因为它将两个不同的数据集彼此分开,并且用户auth表很窄,因此它更适合内存(和各种缓存),并且不需要使用(更广泛的)用户详细信息无论何时需要身份验证。
至于安全性,除了备份存储要求外,我并没有看到一个表与两个表的区别。
与往常一样,衡量并比较 特定情况下的累积方式。