寻求创建一个保存用户信息(主要是用户和密码)的数据库表。在数据库中存储用户密码/数据
- 散列(密码)和用户的最佳方式是?
- 我是否应该加密用户的名字?
- 如果我有一个密码表和另一个用户数据表,我怎么可以关联/链接它们?
登录是没有问题的,问题是如何将表(数据的密码的表和表为每个用户)
由于
寻求创建一个保存用户信息(主要是用户和密码)的数据库表。在数据库中存储用户密码/数据
登录是没有问题的,问题是如何将表(数据的密码的表和表为每个用户)
由于
关联的登录是没有问题的中, 问题是表关联 (口令和数据的 表针对每个用户的表)
要表关联,您可以用关系工作:
我会存储散列和表中腌制密码与用户数据的其余部分。如果您真的想将密码存储在单独的表中,请将用户标识与其关联以将密码与用户相关联。通常使用强哈希算法,例如SHA251并加密密码以防止彩虹表攻击。我不认为你应该需要散列用户名。
感谢贝林加,我有一个独特的表/传入/登录,问题是表中的关系:用户迈克和在另一个表中存在的关联(个人)数据 – anvd 2011-03-16 18:01:48
*不*使用加密哈希算法!使用bcrypt(http://bcrypt.sourceforge.net/) – 2011-03-16 18:04:10
@Fel,这已经说了几次了,但我们都强烈建议你只需添加UserId,Username和PasswordHash列来扩展用户表。如果你这样做,你的生活将会更容易。这是一个选择吗? – 2011-03-16 18:04:20
正如我上面评论,我只是散列密码。
另外,你为什么要在单独的表中存储用户和密码?它们是相关的,应该在同一个表中。诸如地址之类的数据将属于单独的表格。
不,我的想法只是通过/登录和另一个关联的数据,如出生,位置等表 – anvd 2011-03-16 17:57:45
如果您绝对必须有两个表,一个使用哈希/盐渍密码,另一个使用用户信息,您可以使用代理键来执行表之间的关系。
你可以有一个设置是这样的:
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是代理键,您可以使用它在用户表中的密码表参考价值。您可以使用SQL查询将表连接在一起:
SELECT *
FROM users INNER JOIN passwords
ON users.PASSWORD_ID = passwords.PASSWORD_ID;
虽然我不会在任何系统中使用称为“密码”的表,因为它是一个成熟的黑客对象... – 2011-03-16 19:16:59
我只是散列密码。显然,两者都会更安全,但我相信最好的做法是散列密码。 – 2011-03-16 17:50:41
您还应该为每个密码使用不同的盐。 – John 2011-03-16 17:53:07
@John,如果你对每个密码使用不同的盐,当你需要检查用户密码是否正确时,你会如何使用正确的salt? – 2011-03-16 17:59:23