0

我在应用程序中使用 asp 会员资格。
我添加了表,它具有(asp 成员资格)的UserProfile外键。 我使用外键是因为用户名是电子邮件并且是唯一的。 在我需要引用用户的任何地方,我都将其用作外键。 例如,当我需要获取配置文件时,我从应用程序传递给存储过程以获取数据。 我只是想知道这是否是做到这一点的好方法。这里有一些潜在的安全问题吗?Users
Username
Username
Username

4

3 回答 3

6

我在这里看到的主要问题是您为外键花费了大量“数据空间”,这将使其变慢并占用表的数据库空间。此外,您的数据库表将连接进行字符串比较 - 数据库注意并为这些字符串进行哈希处理,然后进行数字比较,但有一点点小开销。

只需使 UserName 唯一并使用数字外键将其与其余表连接。

这里的第二个问题是当用户需要更改他们的电子邮件,或者出于任何原因给它错误。在这种情况下,您需要更新数据库上的所有连接并确保没有其他类似的电子邮件。

还有一个问题是电子邮件和外键可以区分大小写或不区分大小写。如果出于任何原因你让它区分大小写,那么你就会弄得一团糟。

关于安全问题,您总是需要使用参数打开并询问您的数据库。这对于数字键或字符串键是相同的,因此在这种情况下没有什么不同。

于 2012-04-11T10:42:07.180 回答
2

我会因为一个简单的原因说不:许多系统允许用户更改他们的用户名。在您的情况下,您将其链接到一个电子邮件地址,应该允许用户更改该地址。

如果将其用作外键,则必须运行更新以保持数据同步,这很糟糕。

于 2012-04-11T11:15:16.210 回答
0

这是一个古老的自然与替代关键讨论。这两种方法都有“粉丝”,但简单的事实是,两者都有利有弊,您必须做出最适合您特定情况的决定。

对于电子邮件作为 PK 的具体情况,您可能想看看这个讨论

于 2012-04-11T11:11:31.860 回答