您会使用一个或两个表作为用户名和密码吗?

exp*_*ora 10 mysql sql security database-design

是否更安全地创建一个包含用户信息的表和另一个用于密码的表,而不是使用相同的表来表示所有内容?

Sna*_*ake 9

不,我会这样做:

id,用户名,密码.

其中id只是自动增量,username是varchar 20(左右,具体取决于你的需要),password是带有salt的MD5或SHA1哈希密码.

使用两个表只是没有意义.然后,您需要使用联接来获取数据.这只是一种不必要的负担.

  • 别忘了把盐加到桌子上. (3认同)
  • 你不一定需要这样做.您可以为每个密码使用一个盐.如果数据库被黑了,他们没有盐.如果将它添加到数据库中,则会执行此操作.salt的想法只是最终用户无法对结果哈希进行最终控制. (2认同)
  • 同意迈克尔 - 你需要每个密码的独特盐.您应该始终认为攻击者可以使用盐.使用全局盐,攻击者可以构建一个密码*字典**并将其用于数据库中的所有用户.使用每个密码唯一的盐,攻击者必须为每个用户*构建不同的字典*,这很困难.如果他只想要一个特定用户的密码,那么这两种方法都无济于事; 但是当你谈到成千上万的用户时,独特的盐会有很大的帮助. (2认同)

Dan*_*llo 6

不,我看不出这怎么能让它更安全.

实际上你应该避免存储密码.只需存储他们的盐渍哈希.

进一步阅读:

  • +1绝对 - 你只需要比较哈希是否相等. (2认同)