我想设计一个具有以下功能的身份验证数据库:
因此,我设计了以下表格(主键以粗体显示):
Authentication_Info
UID |密码盐| Is_logged_in |电子邮件已验证| Phone_Verified
User_Info
UID |名|姓氏|电邮|位置|注册日期|电话号码|出生日期| isEnabled
SecurityQ / A
UID | SID |安全问题| SecurityAnswer
Passed_login_info
UID | 时间 |位置| IP |设备
将它们更改为3NF后,得到以下表格(再次,主键为粗体):
Authentication_Info
UID |密码盐| Is_logged_in
User_Info
UID |名|姓氏| Email_id |位置|注册日期| Phone_id |出生日期
SecurityQ / A
UID | SID |安全问题| SecurityAnswer
Passed_login_info
UID | PID |时间|位置| IP |设备
令牌验证
Verification_id | UID | TempToken | Expire_Time
这是一个好的设计吗?我有犯过任何错误吗?
答案 0 :(得分:0)
由于我不熟悉该应用程序的预期用途,因此无法确定以下建议是否适用于这种情况,但是无论如何,这里有一些建议:
关于Token_Verification
表,我相信只需要三个字段:UID
,TempToken
,Expire_Time
。我认为不需要Verification_id
。
Authentication_Info
表不需要Is_logged_in
的字段,因为我们可以通过在UID
表中搜索一个Token_Verification
来检查TempToken
是否已登录。有效的Password_salt
。因此,可以删除此字段。
Authentication_Info
表中的Salt
字段应分为SaltedHash_Password
和(salt + password)
。到达密码进行验证时,您将必须加盐,对SecurityQ/A
进行哈希处理,然后与存储的值进行比较。
在SecurityAnswer
表中,应将UID
视为密码。每个安全性答案应与唯一的随机盐一起存储。因此,表的字段应为SID
,SecurityQuestion
,Salt
,SaltedHash_SecurityAnswer
, (\(\
).. \
\Y_, '-.
) '.
| \/ \
\\ |\_ |_
((_/(__/_,'.
(,----'
。
我上面没有提到的表对我来说很好:)
reflect.Value