Почему информация пользователя хранится в двух разных таблицах в ASP.NET-членстве по умолчанию?

Существуют две таблицы: aspnet_users и aspnet_membership. Может ли кто-нибудь объяснить причины, по которым они не используют для этого одну таблицу?

Ответ 1

В таблице членства содержится информация, связанная с интерфейсом API MembershipProvider. Таблица пользователей хранит имена пользователей и идентификаторы пользователей, на которые ссылаются многие поставщики.

  • Пользователи
    • Членство (MembershipProvider)
    • Профиль (ProfileProvider)
    • Роли (RoleManager)
    • и т.д.

Система aspnetdb очень модульная, и каждая часть может быть настроена через различных поставщиков. Таблицы должны быть разделены, чтобы каждый интерфейс мог быть переписан, перенаправлен и т.д.

Ответ 2

Некоторые из других поставщиков в ASP.NET(кроме поставщика членства) также хранят информацию, специфичную для пользователя. например Профиль.

Дополнительная информация:

Некоторые из отправленных поставщиков ASP.NET хранят/используют информацию в контексте имени пользователя. Одним из них является MembershipProvider, который предоставляет хранилище аутентификации и набор сервисов.

Другим является ProfileProvider, который позволяет удерживать данные пользователя для каждого пользователя.

Вы все равно можете использовать ProfileProvider независимо от того, выбрали ли вы использовать MembershipProvider. Поскольку ProfileProvider должен хранить данные против имени пользователя (т.е. Как показано в свойстве Context.User.Identity.Name), он будет продолжать работу и добавит запись пользователя в aspnet_Users.

Надеюсь, это пояснит причину разделения.

Ответ 3

Честно говоря, это тоже не имеет большого смысла. Кажется, что таблица aspnet_Membership была настроена для размещения информации о пользователе/​​уровне приложения, но UserID - это ПК. Очень странно. Возможно, возникла ситуация, когда у вас есть несколько приложений для каждого пользователя в более позднем выпуске.

Дэйв упоминает, что есть другие таблицы, такие как aspnet_Profile, которые содержат пользовательскую информацию. Возможно, люди ASP.NET 2.0 просто пытались разделить разные группы полей на более легко усваиваемые фрагменты.

Я знаю, это всего лишь куча догадок. Надеюсь, кто-то с некоторыми фактическими знаниями зазвонит.

Ответ 4

Я нашел это объяснение на этой странице страница:

SqlMembershipProvider хранит информацию учетной записи пользователя в двух связанных таблицах:

  • aspnet_Users - имеет запись для каждой учетной записи пользователя, которая хранит основные сведения. Столбец UserId однозначно идентифицирует каждого пользователя в системе и хранится как уникальный идентификатор (GUID).

  • aspnet_Membership - имеет столбец UserId, который связывает каждую запись с конкретной записью в aspnet_Users. В таблице aspnet_Membership хранятся основные данные, связанные с каждой учетной записью пользователя: электронная почта, пароль, вопрос безопасности и ответ и т.д.

Ответ 5

aspnet_users содержит создаваемых вами пользователей (аутентификация FORMS)... ПРИМЕЧАНИЕ THET, когда ваша аутентификация установлена ​​на WINDOWS, пользователи - пользователи WINDOWS, например. домен \firstname.lastname

aspnet_membership содержит информацию о предпочтениях членов, используемых в таких материалах, как WebPart и пользовательские настройки

Ответ 6

В таблице aspnet_users содержится информация для всех пользователей: анонимная, а не анонимная. Таблица aspnet_membership содержит информацию о пользователях регистра (анонимно).