【问题标题】:Email addresses as account primary keys电子邮件地址作为帐户主键
【发布时间】:2020-08-12 06:05:21
【问题描述】:

这可能不是问的正确地方,但我想如果我需要这类基础设施方面的专家,这可能是那种地方会有一些人。

我和 CTO 碰了壁。

基本上我有一个使用 SSO 模型的后端,我被告知“电子邮件地址基本上是对用户的主键引用”,因为多个帐户不能共享一个电子邮件地址。

我整个上午都在指向 Microsoft 的 Auth 结构的示例,该结构“询问”用户提供电子邮件地址,然后列出具有该地址的所有帐户供您选择,然后使用密码进行身份验证,其他提供商遵循OAuth 标准也遵循类似的 UI 结构。

CTO 似乎由此推断电子邮件地址与 userId(用于在整个 SSO 环境中识别用户的主键)基本相同,因此拥有单独的 PK 是“毫无意义的复杂化微软只是出于某些 BS 的原因”。

我关心的典型例子......

  1. 重用问题: 有些人甚至小型企业共享一个电子邮件地址。和电话号码一样,电子邮件也可以重复使用。 Jsmith@somecompany.com 一年后很容易属于 John Smith,两年后属于 Julia Smith。

  2. 更新问题: 电子邮件的另一个问题是它们经常变化。如果您要以它作为键加入其他表,那么您还必须更新其他表,当整个客户公司更改他们的电子邮件时(我已经看到这种情况发生),这可能会对性能造成很大影响。

  3. 多帐户问题: 我在加入公司时创建了一个 Microsoft 帐户,用于将我的 MSDN 子链接到该帐户。 后来,该公司订阅了 Azure,并为我创建了一个链接到同一电子邮件地址的帐户。 老板声称这些应该被视为同一个帐户,因此我的组织应该管理它,因为它拥有@mycompany.com 域。

  4. 多重解题: 我有一个电子邮件地址,我使用该地址注册使用我们的 CMS 中的应用程序。 我后来注册在我们的 CMS 中使用另一个应用程序(所以相同的 SSO,我们公司的不同客户)。 是同一个帐户吗?那些应用的管理员可以“管理我的帐户”?

  5. 多个供应商问题: 我有一个链接到我的 Facebook、谷歌和 Microsoft 帐户的电子邮件地址,我想将这些链接到我的公司帐户,以便我可以使用这些凭据登录,它们都共享一个电子邮件地址,但它们也是多个远程帐户.. . 如果我想将它们链接到不同的本地帐户并使用远程电子邮件地址处理我们系统中的所有通信,该怎么办?

在我看来,电子邮件地址没有任何业务被视为任何重要事物的主键,对于像安全模型这样重要的事物更是如此,老板不同意。

我错了吗?

【问题讨论】:

  • 感觉你说的每一句话都有道理,你也知道这一点,但没有什么比为第三方写一个话题更能帮助你理清思路了:-)
  • 从安全角度来看,电子邮件地址很有价值,不应在没有充分理由的情况下到处乱扔。组织应该不再使用电子邮件地址作为登录凭据。
  • @Martin 我完全同意……但是为什么呢?就像整个行业都同意“我们不要那样做……”然后到处都这样做。
  • 因为很多人认为安全是“如何让最终用户感到安全”而不是“如何真正保护最终用户”。安全是使用不同的系统来防御不同的威胁;长密码可防止自动登录尝试,带有疯狂符号的较短密码可防止人工登录尝试。研究和实施最佳实践取决于,尽管 Google 和 Facebook 等公司绝对没有在其各种安全实践中使用最佳实践。

标签: email security


【解决方案1】:

正如您的措辞“因为多个帐户不能共享一个电子邮件地址”。似乎暗示电子邮件应该是唯一而不是主键

唯一约束与主键不同,正如您已经发现的那样,电子邮件是一个非常糟糕的主键。

主键应该是surrogate keys。我倾向于认为 Natural keys 从来都不是数据库主键的好人选。

【讨论】:

  • 我不是这样说的......我的老板是......根据我的一些典型问题部分,我完全不同意这种说法。
猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多