在asp.net成员资格中使用username作为外键是否可以

时间:2012-04-11 09:43:14

标签: asp.net sql-server database database-design asp.net-membership

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

3 个答案:

答案 0 :(得分:5)

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

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

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

还有一个问题是电子邮件和外键可能区分大小写。如果由于任何原因你使它区分大小写,那么你就搞得一团糟。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

对于作为PK的电子邮件的具体情况,您可能需要查看this discussion