【问题标题】:Generate a unique access key for account setup with SQL使用 SQL 为帐户设置生成唯一的访问密钥
【发布时间】:2019-10-17 15:19:14
【问题描述】:

我正在尝试提出一种有效的方法来为我正在编写的应用程序生成/验证唯一访问密钥。我遇到的问题是因为 SQL 数据库的设置方式。

基本上,有两个表有问题。 Users 表和 Faculty 表。 UsersFaculty 表之间存在一对多关系。每个用户都将使用个人电子邮件和密码创建一个帐户。这将在Users 表中创建一个条目。

现在,我想允许管理员输入 电子邮件和名称,并生成设置密钥。然后,用户将能够输入该访问密钥,该访问密钥将他们在Users 表中的行链接到Faculty 表中的一行,并带有user_id 外键。

我想过这样做的方式是,当管理员生成设置键时,它将在教员表中创建一个具有空外键的行。然后,用户必须输入设置密钥 AND 管理员输入的 电子邮件。假设它全部匹配,然后它将他们的user_id 添加到该外键列。

这就是问题所在。使用包含设置键和电子邮件的单独表作为查找表并在向faculty 表中添加一行之前仅搜索具有两列的表会更有效吗?我认为这可能会更快,因为一旦验证行就可以删除,每次搜索的行更少。另外,我不确定在我的第一种方法中将外键保留为空是否存在问题。

假设一个唯一的密钥/电子邮件对,这是否足够安全,或者我还需要一些方法来检查登录用户?

非常感谢任何资源或想法。

【问题讨论】:

    标签: sql sql-server unique-key


    【解决方案1】:

    如果您为此目的创建一个单独的表,我怀疑在性能方面会有很大的好处,但它会在数据完整性方面有很大的好处。为每个允许的访问创建一个新的教员记录会导致冗余,因为您必须在多个记录中添加相同的教员,并且从长远来看会产生大问题,处理所有冗余变得更加困难,最终导致不一致.因此,最初的方法将违反database normalization 的概念。如果您有一个用户表、一个院系表和另一个 users_of_faculties 表,您将获得更好的结果。如果需要,这将允许用户访问更多学院,并且每个用户,每个学院都将在一个地方创建,当某些学院的某些用户授予、修改或撤销访问权限时,他们的关系将更频繁地更改。

    【讨论】:

    • 我想我应该提供更多信息。还有学校,每个学校可以有很多教师。一个学院也可以是多个学校的一部分。这就是为什么我认为用户可能在教员表中有多行。
    • @Kenta 我认为学校与其教师之间的 1:n 关系并没有改变教师在概念上与用户不同的事实。因此,即使您的项目比我乍一看看起来更复杂,但我的观点并没有改变:我相信您需要通过拥有一个 user 表、一个 Faculty 表和一个 user_of_faculty 表来防止冗余。用户对教师的访问似乎是一个独立的概念。或者,换一种说法:用户访问似乎不是教师的属性。
    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 2016-05-20
    • 1970-01-01
    • 2010-09-08
    • 2023-04-04
    • 1970-01-01
    • 2016-11-11
    • 2013-07-18
    相关资源
    最近更新 更多