各ユーザーが独自のソルトを持つ認証システムを構築したいと思います。各パスワードは、それが属するユーザーのソルトでハッシュされます。
データベース スキーマはどのように設計すればよいですか?
ここに私が思いついたデザインがありますが、hash
依存していて、これが第 3 正規形salt
に違反しているため、よくわかりません。
users(id, salt, hash, ...)
各ユーザーが独自のソルトを持つ認証システムを構築したいと思います。各パスワードは、それが属するユーザーのソルトでハッシュされます。
データベース スキーマはどのように設計すればよいですか?
ここに私が思いついたデザインがありますが、hash
依存していて、これが第 3 正規形salt
に違反しているため、よくわかりません。
users(id, salt, hash, ...)
私は正規化規則に準拠することに固執しているわけではありませんが、あなたがどこから来ているのか理解しています。
問題のある列を削除し、その機能を維持するには、1つのフィールド内でソルトとハッシュを単純に連結することを検討できます。一方または両方の値が同じ長さを維持する場合は、区切り文字は必要ありません。
または、Bcryptをパスワードハッシュとして使用することもできます。ハッシュは、パスワードとコスト係数とともにランダムなソルトを取ります。パスワードフィールドに保存できる長い文字列を生成します。このテーマに関する彼の仕事については、ircmaxellのブログをチェックしてください。
あなたのデザインは素晴らしいです。多くのシステムがこのアイデアを使用しています。ハッシュは (いわば) ソルトに厳密に依存しておらず、(パスワードと共に) ソルトから計算されただけなので、3NF を完全に破るわけではありません。