将用户密码/数据存储在数据库中

时间:2011-03-16 17:49:05

标签: mysql sql database-design relational-database

希望创建一个保存用户信息(主要是用户和密码)的数据库表。

  • 是哈希(密码)和用户的最佳方式吗?
  • 我是否应该加密用户名?
  • 如果我有一个密码表而另一个有用户数据,我可以如何关联/链接它们?

登录不是问题,问题是如何关联表(密码表和每个用户的数据表)

由于

6 个答案:

答案 0 :(得分:3)

您基本的用户表看起来像这样:

User Table
-------
id    username    password
1     mike        @#$90sDfsa

密码是我的密码的哈希版本(salt)。

答案 1 :(得分:1)

您应该在存储密码之前对密码进行哈希处理。理想情况下,使用独特的盐。

作为哈希函数,您不应该使用像SHA- *之类的东西,因为加密哈希函数的设计速度很快。这使得获取哈希的人很容易以非常快的速度尝试大量可能的密码。

使用bcrypt之类的密码哈希函数,该函数设计为任意慢。

答案 2 :(得分:0)

  

登录不是问题所在   问题是关联表   (密码表和数据表   为每个用户)

要关联表,您可以使用关系:

答案 3 :(得分:0)

我会将哈希和盐渍密码与其他用户数据一起存储在表中。如果您确实希望将密码存储在单独的表中,则存储用户ID以将密码与用户关联。通常使用强散列算法,例如SHA251和salt密码以防止彩虹表攻击。我认为您不应该使用用户名哈希。

答案 4 :(得分:0)

正如我上面评论的那样,我只是哈希密码。

另外,为什么要将用户和密码存储在单独的表中?它们是相关的,应该在同一个表中。地址等数据属于单独的表格。

答案 5 :(得分:0)

如果绝对必须有两个表,一个使用散列/加密密码,另一个使用用户信息,则可以使用代理键来执行表之间的关系。

你可以这样设置:

CREATE TABLE users (USER_ID INTEGER, 
                    PASSWORD_ID INTEGER, 
                    USER_ATTRIBUTE VARCHAR(30));
CREATE TABLE passwords (PASSWORD_ID INTEGER, 
                        PASSWORD_HASH VARCHAR(255));

PASSWORD_ID是代理键,您可以在users表中使用它来引用密码表中的值。您可以将表与SQL查询一起连接:

SELECT * 
FROM users INNER JOIN passwords 
     ON users.PASSWORD_ID = passwords.PASSWORD_ID;