Существует ли стандартная реализация базы данных пользователей?


14

Мне нужно реализовать основные персонализированные пользовательские функции для моего сайта. Существует ли стандартная структура для баз данных этого типа? Например, общепринятая практика - хранить всю пользовательскую информацию и данные в одной таблице, где каждый пользователь имеет свою собственную строку, или эту информацию следует разделить между различными таблицами и связать вместе (возможно, для эффективности?). Я не очень обеспокоен безопасностью на данный момент, но я, очевидно, хочу иметь шифрование пароля в ближайшее время.

Я пытался найти то, что я искал в Google, но безрезультатно. Просто дайте мне знать, если вопрос нуждается в дополнительном уточнении или что-нибудь.

Ответы:


17

Я предлагаю вам использовать типичные стандарты нормализации. Один пользователь на строку.

  • Идентификатор пользователя (увеличение bigint)
  • Общее имя пользователя (отображается на сайте)
  • Адрес электронной почты пользователя
  • Соль пароля (уникальна для каждого пользователя, вставляется при создании учетной записи)
  • Пароль (Хешируется с солью - MD5 или SHA1, ваши предпочтения)
  • Дата создания аккаунта

Остальное зависит от ваших бизнес-правил.


Современные варианты хеширования паролей: argon2, bcrypt или scrypt.
Дуггард

8

Придется пойти по большой старой моде "это зависит".

Конечно, вам понадобится ключ на этом столе. Вы можете начать с идентификатора пользователя. Это может быть просто увеличивающийся INT (или bigint, если у вас будет более 2,1 миллиона пользователей).

Я видел много баз данных, которые также используют GUID в качестве основного UserID. Но это открывает совершенно другую банку червей, использующих GUID для PK.

Затем вам нужно решить, насколько нормализована ваша база данных. Собираетесь ли вы позволить своему пользователю иметь несколько электронных писем? несколько телефонных номеров? Если это так, они должны быть в другой таблице.

Я бы сохранил основную таблицу пользователей, чтобы:

  • какой-то идентификатор или ПК вы можете использовать
  • Имя / Фамилия или просто имя пользователя
  • какой-то статус пользователя (активный, отключенный и т. д.) - (tinyint ссылается на таблицу состояния)
  • Дата создания

Это должно быть вашей отправной точкой.

Оттуда вы можете добавить другие столбцы в зависимости от того, что вы хотите сохранить. Электронная почта может связываться с таблицей электронной почты, адресом с адресной таблицей и т. Д. Пароль может использовать hash + salt, но рассматривали ли вы openids?

Я настоятельно рекомендую вам прочитать эту статью - http://www.sqlservercentral.com/articles/data-modeling/71725/


0

Если речь идет об аутентификации пользователей, я бы использовал LDAP. Не создавайте отдельную базу данных для пользователей, если вы уже используете базу данных и имеете другие таблицы (заказы, продукты и т. Д.). Вы можете присоединиться к этим столам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.