Idealerweise:
Wenn der Benutzer sich anzumelden versucht, indem er seinen Benutzernamen und sein Passwort eingibt:
Hashes sind von Natur aus irreversibel - anders als der Benutzer kennt niemand, nicht einmal Sie, das genaue Passwort. Wenn der Benutzer das Passwort vergisst, können Sie ihm das Passwort nicht senden, aber Sie können ihm erlauben, das Passwort zurückzusetzen, vorausgesetzt, dass es eine zusätzliche Überprüfung besteht (dh Zugriff auf eine bestimmte E-Mail-Adresse hat und / oder ein Geheimnis beantwortet) Frage).
BTW, Anmeldung ist eine relativ seltene Operation, es ist also unwahrscheinlich, dass es zu einem Leistungsengpass kommt, wenn Sie die ordnungsgemäße Indizierung nicht völlig ignorieren.
1 z. Implementieren Sie einen Webdienst, und öffnen Sie dann nur den Port, der für diesen Webdienst erforderlich ist, und sonst nichts.
Denken Sie, es gibt ein paar Nutzer. Um die Benutzerdaten zu erhalten, müssen Sie also mit n Tabellen statt mit 1 Tabelle arbeiten, was natürlich LOAD auf dem Server hinzufügt und Sie schließlich BAD PERFORMANCE haben werden.
Also würde ich mit Option 1 gehen.
Für tel. number, add field als Festnetznummer, handy_number, alternate_number als addierendes Feld in der Tabelle wird nicht so viel Unterschied machen als das Hinzufügen einer Tabelle für das Feld.
Und ja, nach Steve Kommentar, Passwort mit sicheren Hash-Mechanismus speichern.
Welche Option wählen Sie?
Erstens sollten Sie, wie @Steve sagt, Passwörter mit einem sicheren Hash-Mechanismus speichern - die Speicherung von Klartext-Passwörtern ist unverantwortlich - es bedeutet, dass jeder, der in Ihr System eindringen kann, Benutzerpasswörter kennt, die sie möglicherweise auf anderen Seiten wieder verwendet haben .
Zweitens gibt es in beiden Entwürfen keinen inhärenten Sicherheits- oder Leistungsvorteil - aus Sicherheitsgründen müssen Sie davon ausgehen, dass ein Angreifer, der Zugriff auf Ihre Datenbank erhält, Abfragen ausführen kann, und es wäre einfach zu finden Daten in beiden Systemen. Aus der Sicht der Leistung ist es unwahrscheinlich, dass die Kosten der Joins in Option 2 von Bedeutung sind, wenn Sie primäre / fremde Schlüsselindizes haben.
Wenn Sie nach einem bestimmten Zeitraum die Passwörter neu festlegen müssen und den Passwortverlauf speichern müssen, um zu verhindern, dass Benutzer Kennwörter erneut verwenden (dies ist ein Feature, das Windows beispielsweise unterstützt), müssen Sie einen " UserPassword "-Tabelle mit den Spalten valid_from und valid_until.
Tags und Links sql sql-server mysql database database-design