为什么用户信息存储在ASP.NET的默认成员资格提供程序中的两个不同的表中?

时间:2009-04-27 18:20:44

标签: .net asp.net asp.net-membership

有两个表:aspnet_users和aspnet_membership。任何人都可以详细说明他们为什么不使用单个表格的原因吗?

6 个答案:

答案 0 :(得分:12)

会员资格表包含与 MembershipProvider API接口相关的信息。 users表存储用户名和用户ID,这些用户名和用户ID是从许多提供程序引用的。

  • 用户
    • 会员资格(MembershipProvider)
    • 个人资料(ProfileProvider)
    • 角色(RoleManager)

aspnetdb系统非常模块化,每个部分都可以通过各种提供商进行定制。这些表需要分开,以便可以重写,重定向等每个接口。

答案 1 :(得分:0)

ASP.NET中的一些其他提供程序(成员资格提供程序除外)也存储特定于用户的信息。例如轮廓。

有关此内容的更多信息:

一些提供的ASP.NET提供程序在用户名的上下文中存储/使用信息。 其中一个是 MembershipProvider ,它提供了一个身份验证存储和一组服务。

另一个是 ProfileProvider ,它允许针对每个用户持有特定于用户的数据。

无论您是否选择使用 MembershipProvider ,您仍然可以使用 ProfileProvider 。 由于 ProfileProvider 必须根据用户名存储数据(即由Context.User.Identity.Name属性公开),因此将继续将用户记录添加到aspnet_Users中。

希望这澄清了分离的原因。

答案 2 :(得分:0)

老实说,对我来说也没什么意义。似乎aspnet_Membership表设置为容纳用户/应用程序级别信息,但UserID是PK。很奇怪。也许在某些情况下,您可能会在以后的版本中为每个用户设置多个应用程序。

Dave提到有一些像aspnet_Profile这样的表可以保存用户特定的信息。可能是ASP.NET 2.0人员只是试图将不同的字段分组分成更容易消化的块。

我知道这只是一堆猜想。希望有实际知识的人会参与其中。

答案 3 :(得分:0)

我从这个page找到了这个探索:

SqlMembershipProvider将用户帐户信息存储在两个相关表中:

  • aspnet_Users - 拥有每个用户帐户的记录,存储必需品。 UserId列唯一标识系统中的每个用户,并存储为唯一标识符(GUID)。

  • aspnet_Membership - 有一个UserId列,它将每条记录绑定回aspnet_Users中的特定记录。 aspnet_Membership表存储与每个用户帐户关联的核心数据:电子邮件,密码,安全问题和答案等。

答案 4 :(得分:0)

aspnet_users包含您创建的用户(身份验证FORMS)...注意当您的身份验证设置为WINDOWS时,用户是WINDOWS用户,例如域\ firstname.lastname

aspnet_membership包含WebPart和用户设置等内容中使用的会员资格偏好信息

答案 5 :(得分:0)

aspnet_users表包含所有用户的信息:匿名而非匿名。 aspnet_membership表包含有关注册用户的信息(无匿名)。