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