Gibt es eine Standardimplementierung einer Benutzerdatenbank?

13

Ich muss grundlegende personalisierte Benutzerfunktionen für meine Website implementieren. Gibt es eine Standardstruktur für Datenbanken dieses Typs? Wie es allgemein üblich ist, alle Benutzerinformationen und -daten in einer einzigen Tabelle zu haben, wobei jeder Benutzer seine eigene Zeile hat, oder sollten diese Informationen auf verschiedene Tabellen aufgeteilt und miteinander verknüpft werden (vielleicht aus Gründen der Effizienz?) An diesem Punkt, aber ich möchte natürlich schon bald eine Passwortverschlüsselung haben.

Ich habe versucht, auf Google zu finden, wonach ich gesucht habe, aber ohne Erfolg. Lassen Sie mich einfach wissen, ob die Frage einer weiteren Klärung bedarf.

cfrederich
quelle

Antworten:

16

Ich schlage vor, dass Sie typische Normalisierungsstandards verwenden. Ein Benutzer pro Zeile.

  • Benutzer-ID (inkrementelle Bigint)
  • Allgemeiner Benutzername (wird auf der Site angezeigt)
  • E-Mail-Adresse des Benutzers
  • Passwort Salt (Eindeutig für jeden Benutzer, eingefügt bei der Kontoerstellung)
  • Passwort (Hash mit dem Salz - MD5 oder SHA1, Ihre Präferenz)
  • Datum, an dem das Konto erstellt wurde

Der Rest hängt von Ihren Geschäftsregeln ab.

Josh Bond
quelle
8

Ich werde mich für eine große alte Mode entscheiden müssen, "es kommt darauf an".

Natürlich brauchen Sie einen Schlüssel für diesen Tisch. Sie könnten mit einer UserID beginnen. Dies kann nur eine inkrementelle INT sein (oder bigint, wenn Sie mehr als 2,1 Millionen Benutzer haben).

Ich habe gesehen, dass viele Datenbanken auch GUIDs als Hauptbenutzer-ID verwenden. Aber das eröffnet eine ganz andere Dose von Würmern, die GUIDs für PKs verwenden.

Sie müssen dann entscheiden, wie normalisiert Ihre Datenbank sein soll. Erlauben Sie Ihrem Benutzer mehrere E-Mails? mehrere Telefonnummern? In diesem Fall sollten sie sich in einer anderen Tabelle befinden.

Ich würde die Hauptbenutzertabelle behalten, um:

  • eine Art von ID oder PK, die Sie verwenden können
  • Vorname / Nachname oder nur ein Benutzername
  • eine Art Status des Benutzers (aktiv, deaktiviert usw.) - (tinyint Verknüpfung mit einer Statustabelle)
  • Erstellungsdatum

Das sollte dein Ausgangspunkt sein.

Von dort aus können Sie weitere Spalten hinzufügen, je nachdem, was Sie speichern möchten. E-Mail könnte einen Link zu einer E-Mail-Tabelle, eine Adresse zu einer Adresstabelle usw. enthalten. Passwort könnte Hash + Salt enthalten, aber haben Sie Openids in Betracht gezogen?

Ich empfehle Ihnen dringend, diesen Artikel zu lesen - http://www.sqlservercentral.com/articles/data-modeling/71725/

SqlSandwiches
quelle
0

Wenn es um die Authentifizierung von Benutzern geht, würde ich LDAP verwenden. Erstellen Sie keine separate Datenbank für die Benutzer, wenn Sie bereits eine Datenbank verwenden und über andere Tabellen (Bestellungen, Produkte usw.) verfügen. Möglicherweise möchten Sie diese Tabellen verknüpfen.


quelle