我了解盐、散列和所有密码的好东西的重要性。我的问题与关系数据库理论有关。
我对第 3 范式的理解是,每个元素都必须提供关于键、整个键的事实,而只有键(所以请帮助我 Codd。感谢维基百科)。所以我正在审查我的一些表格,我遇到了这个。
-- Users
CREATE TABLE accounts(
player_id mediumint NOT NULL AUTO_INCREMENT, -- Surrogate Key
username VARCHAR(32) UNIQUE NOT NULL, -- True primary key
salt char(29), -- Passwords are stored in bcrypt hash
hash char(60), -- Salt + Hash stored
created DATETIME,
lastlogin DATETIME,
PRIMARY KEY (player_id)
) ENGINE = InnoDB;
问题:这个表是第三范式吗?我的理解是......“哈希”取决于 player_id 和盐。IE:哈希->(用户名,盐)。
我只是看不出拆分这张桌子有什么真正的好处。但我担心可能存在更新异常或我看不到的东西。