Existe-t-il une implémentation standard d'une base de données d'utilisateurs?

14

J'ai besoin de mettre en œuvre des fonctionnalités utilisateur personnalisées de base pour mon site Web. Existe-t-il une structure standard pour les bases de données de ce type? Comme c'est la pratique courante d'avoir toutes les informations et données utilisateur dans une seule table avec chaque utilisateur ayant sa propre ligne, ou ces informations devraient-elles être réparties entre différentes tables et reliées entre elles (peut-être pour l'efficacité?) Je ne suis pas extrêmement préoccupé par la sécurité à ce stade, mais je veux évidemment avoir un cryptage de mot de passe avant trop longtemps.

J'ai essayé de trouver ce que je cherchais sur google, mais en vain. Faites-moi simplement savoir si la question nécessite des éclaircissements ou quoi que ce soit.

cfrederich
la source

Réponses:

17

Je vous suggère d'utiliser des normes de normalisation typiques. Un utilisateur par ligne.

  • ID utilisateur (incrémentation bigint)
  • Nom commun de l'utilisateur (à afficher sur le site)
  • Adresse e-mail de l'utilisateur
  • Mot de passe Salt (unique pour chaque utilisateur, inséré lors de la création du compte)
  • Mot de passe (haché avec du sel - MD5 ou SHA1, votre préférence)
  • Date de création du compte

Le reste est à vous compte tenu de vos règles commerciales.

Josh Bond
la source
Les choix de hachage de mot de passe modernes seraient argon2, bcrypt ou scrypt.
douggard il y a
8

Il va falloir opter pour une grosse vieille mode "ça dépend".

Bien sûr, vous allez avoir besoin d'une sorte de clé sur cette table. Vous pouvez commencer avec un ID utilisateur. Cela pourrait simplement être une INT incrémentation (ou bigint si vous comptez avoir plus de 2,1 millions d'utilisateurs).

J'ai vu beaucoup de bases de données utiliser également des GUID comme principal UserID. Mais cela ouvre une toute autre boîte de vers à l'aide de GUID pour PK.

Vous devez ensuite décider du degré de normalisation de votre base de données. Allez-vous autoriser votre utilisateur à avoir plusieurs e-mails? plusieurs numéros de téléphone? Si c'est le cas, ils devraient être dans un tableau différent.

Je garderais la table utilisateur principale pour:

  • une sorte d'ID ou de PK que vous pouvez utiliser
  • Prénom / Nom ou simplement un nom d'utilisateur
  • une sorte de statut de l'utilisateur (actif, désactivé, etc.) - (tinyint reliant à une table d'état)
  • date de création

Cela devrait être votre point de départ.

De là, vous pouvez ajouter d'autres colonnes en fonction de ce que vous souhaitez stocker. L'e-mail peut être lié à une table d'e-mail, l'adresse à une table d'adresses, etc.

Je vous recommande fortement de lire cet article - http://www.sqlservercentral.com/articles/data-modeling/71725/

SqlSandwiches
la source
0

S'il s'agit de l'authentification des utilisateurs, j'utiliserais LDAP. Ne créez pas de base de données distincte pour les utilisateurs, si vous utilisez déjà une base de données et avez d'autres tables (commandes, produits, etc.). Vous voudrez peut-être rejoindre ces tables.


la source