我在应用程序中使用 asp 会员资格。
我添加了表,它具有(asp 成员资格)的UserProfile
外键。
我使用外键是因为用户名是电子邮件并且是唯一的。
在我需要引用用户的任何地方,我都将其用作外键。
例如,当我需要获取配置文件时,我从应用程序传递给存储过程以获取数据。
我只是想知道这是否是做到这一点的好方法。这里有一些潜在的安全问题吗?Users
Username
Username
Username
问问题
942 次
3 回答
6
我在这里看到的主要问题是您为外键花费了大量“数据空间”,这将使其变慢并占用表的数据库空间。此外,您的数据库表将连接进行字符串比较 - 数据库注意并为这些字符串进行哈希处理,然后进行数字比较,但有一点点小开销。
只需使 UserName 唯一并使用数字外键将其与其余表连接。
这里的第二个问题是当用户需要更改他们的电子邮件,或者出于任何原因给它错误。在这种情况下,您需要更新数据库上的所有连接并确保没有其他类似的电子邮件。
还有一个问题是电子邮件和外键可以区分大小写或不区分大小写。如果出于任何原因你让它区分大小写,那么你就会弄得一团糟。
关于安全问题,您总是需要使用参数打开并询问您的数据库。这对于数字键或字符串键是相同的,因此在这种情况下没有什么不同。
于 2012-04-11T10:42:07.180 回答
2
我会因为一个简单的原因说不:许多系统允许用户更改他们的用户名。在您的情况下,您将其链接到一个电子邮件地址,应该允许用户更改该地址。
如果将其用作外键,则必须运行更新以保持数据同步,这很糟糕。
于 2012-04-11T11:15:16.210 回答
0
这是一个古老的自然与替代关键讨论。这两种方法都有“粉丝”,但简单的事实是,两者都有利有弊,您必须做出最适合您特定情况的决定。
对于电子邮件作为 PK 的具体情况,您可能想看看这个讨论。
于 2012-04-11T11:11:31.860 回答