用户数据库是否有标准实现?


14

我需要为我的网站实现基本的个性化用户功能。这种类型的数据库是否有标准结构?就像将所有用户信息和数据都放在一个表中,每个用户都有自己的行是一种常见的做法,还是应该将此信息拆分到不同的表中并链接在一起(也许是为了提高效率?),我不太关心安全性在这一点上,但我显然希望过早地进行密码加密。

我试图找到我在Google上想要的东西,但无济于事。请让我知道问题是否需要进一步澄清。

Answers:


17

我建议您使用典型的规范化标准。每行一位用户。

  • 用户ID(递增bigint)
  • 用户公用名(将显示在网站上)
  • 用户电子邮件地址
  • 密码盐(每个用户唯一,在创建帐户时插入)
  • 密码(用盐代替-MD5或SHA1,根据您的偏好)
  • 日期帐户已创建

剩下的取决于您的业务规则。


现代的密码哈希选择是argon2,bcrypt或scrypt。
douggard

8

不得不去寻找一种大的旧时尚“取决于”。

当然,您将在此表上需要某种键。您可以从UserID开始。这可能只是一个递增的INT(如果您将拥有210万以上的用户,则为bigint)。

我已经看到很多数据库也使用GUID作为主要的UserID。但是,这为使用GUID的PK打开了完全不同的蠕虫病毒。

然后,您需要确定数据库的标准化程度。您要允许您的用户收到多封电子邮件吗?多个电话号码?如果是这样,它们应该在另一个表中。

我将主用户表保留为:

  • 可以使用的某种ID或PK
  • 名字/姓氏或用户名
  • 用户的某种状态(活动,禁用等)-(tinyint链接到状态表)
  • 创建日期

那应该是您的起点。

在这里,您可以根据要存储的内容添加其他列。电子邮件可以链接到电子邮件表,地址可以链接到地址表等。密码可以使用哈希+盐,但是您是否考虑过openid?

我强烈建议你阅读这篇文章,虽然- http://www.sqlservercentral.com/articles/data-modeling/71725/


0

如果是关于用户身份验证的,我将使用LDAP。如果您已经在使用数据库并且有其他表(订单,产品等),请不要为用户创建单独的数据库。您可能想要加入这些表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.