我想构建一个身份验证系统,每个用户都有自己的盐 - 每个密码都会被其所属用户的盐进行哈希处理。
我应该如何设计数据库架构?
这是我提出的设计,但我不确定,因为hash
取决于salt
,这违反了third normal form:
users(id, salt, hash, ...)
答案 0 :(得分:1)
虽然我不是遵守规范化规则的坚持者,但我知道你来自哪里。
要删除有问题的列并保留其功能,您可以考虑简单地连接一个字段内的salt和hash;如果一个或两个值保持相同的长度,则不需要分隔符。
或者,您可以使用Bcrypt作为密码哈希:哈希随机密码和密码以及成本因素一起使用;它会生成一个长字符串,您可以将其存储在密码字段中。查看ircmaxell的博客,了解他在这个主题上的工作。
答案 1 :(得分:0)
你的设计很好。很多系统都使用这个想法。它没有完全打破3NF,因为Hash并不严格依赖(可以这么说)盐,它只是从它计算出来的(连同密码)。