【问题标题】:User authentication details in user details table or seperate?用户详细信息表中的用户身份验证详细信息还是单独的?
【发布时间】:2011-05-30 03:14:37
【问题描述】:

我有一个用户表,其中包含所有用户详细信息,如姓名、电子邮件、密码哈希、性别、城市、教育等......总共大约 45 列。

问题是:我是否应该将其规范化为两个表,一个用于用户身份验证,即 user_id、email、password_hash、password_salt。

还有第二张表来保存用户详细信息,还是可以将两者都放在一张表中?我不能过多地规范用户详细信息,因为这是一个关键系统,性能非常重要,因此需要保持低连接。

我只是担心用于登录身份验证的用户密码/电子邮件是否应该放在单独的表中以提高安全性?

【问题讨论】:

  • 单独的表如何“更好”安全?是什么让您认为“分离”==“更好”?你在什么地方读过这个吗?
  • "密码哈希" - 我想让你知道,作为互联网的普通用户,我很感激这一点。我经常在 SO 上看到与身份验证相关的问题,其中询问的人提供了演示纯文本密码存储的代码。你真的让我的下午变得如此明亮。谢谢。
  • 不,不读它,但从现实世界的经验来看,你不会把你的超级秘密的东西和你的普通东西一起存储。它们分开存放。我的秘密文件会放在银行的储物柜里。我的个人文件可能在我家的保险箱里。所以我想打破表,然后看看还需要什么来保护身份验证表。
  • 好吧纯文本存储的人不应该被允许做开发。对这些人应该有一个SO禁令。如今,安全和隐私非常重要,并且是每个系统都必须具备的。
  • “你不会把你的超级秘密的东西和你的普通东西一起存储”?为什么不?我仍然不明白你所做的区分。所有数据都是私有的。系统的所有部分都必须是安全的。为什么分离事物会使安全“更好”?如果没有真正的原因(只是与银行和家庭的模糊类比),为什么还要麻烦呢?所有计算机存储都必须同样安全。你有什么区别?我不明白。请解释一下。

标签: database authentication passwords schema


【解决方案1】:

除非这些表以非常不同的方式实现,否则两个表本身不会为一个表提供额外的安全性。例如,它们被分区到不同的硬件,密码表具有本地磁盘加密或类似的东西。即便如此,我们仍在谈论不同形式的“安全”。两张表都还在使用中,其中一张只是在静止时被加密。 (可能还有其他例子,但我现在能想到的就这些了。)

就个人而言,我倾向于使用两个表,而不是从安全的角度来看,而是从关注点分离的角度来看。一种是身份验证,一种是用户配置文件。在绝大多数情况下,它们不需要分开,但我更愿意将它们分开,以防万一需要将它们分开的逻辑更改,因为它们在逻辑上不是一回事。

【讨论】:

    【解决方案2】:

    Symfony 的 sfGuard 使用两个表:一个用于验证数据,另一个用于用户详细信息。这看起来相当明智 - 因为这将两组不同的数据彼此分开,并且用户身份验证表很窄,因此它更适合内存(和各种缓存)并且不需要使用(更广泛的)用户详细信息每当需要身份验证时。

    至于安全性,我真的看不出一张表和两张表有什么区别,除了备份存储要求。

    与往常一样,衡量和比较这在您的具体情况下的效果。

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多