ID Best Practices für Datenbanken

Ich Frage mich, was die best practices wurden für den Aufbau und die Speicherung von IDs. Vor ein paar Jahren, ein professor erzählte mir über die Gefahren eines schlecht konstruierten ID-system, mit dem Social-Security-Nummer als Beispiel. Insbesondere, weil Sozialversicherungsnummern haben keine Fehler-Erkennung... es ist unmöglich zu sagen, den Unterschied zwischen einem 9-stellige Zeichenfolge und eine gültige SSN. Und jetzt Behörden müssen Dinge wie Nachname + Sozialversicherungsnummer oder Geburtstag + SSN zu behalten Ihre Daten und sorgen für deren Verifikation. Plus, Ihre Sozialversicherungsnummer ist auch etwas vorhersehbar, je nachdem, wo Sie geboren wurden.

Moment Baue ich eine User-Datenbank... und basierend auf dieser Beratung "userid mediumint auto_increment" wäre inakzeptabel. Vor allem, wenn ich Plane, verwenden Sie diese ID, da die primäre Identifikation für den Benutzer. (wenn ich zum Beispiel erlauben Sie den Benutzern, ändern Sie Ihren Benutzernamen, dann wird der Benutzername wäre schwieriger zu verfolgen als die numerische userid... erfordern cascading foreign-keys und so weiter.) E-Mails ändern, Benutzernamen ändern, Passwörter ändern,... aber die BenutzerID sollte konstant bleiben, für immer.

Klar, auto_increment ist nur für surrogate_keys. Das heißt, Ihre sinnvolle Verknüpfung nur, wenn Sie bereits eine primäre Identifikation Mechanismus, aber es sollte nicht verwendet werden, als eine "angeborene " identifier" für die Daten. Erstellen einer zufälligen UUID sieht interessant aus, aber die Zufälligkeit macht mich aus.

Und so Frage ich: was ist die best practices für die Schaffung eines "primary key" Identifikationsnummer?

  • Was ist mit Ihrem professor, der Ratschläge führte Sie zu dem Schluss, dass der auto-increment Integer geeignet waren als eindeutige Bezeichner für die Benutzer-Daten?
  • Auto-increment Integer sind vorhersehbar und keine form von Fehler-Erkennung. Zumindest würde ich erwarten, dass eine "professionelle" ID Praxis zu sein, etwas unberechenbar und selbst-Identifikation. Zum Beispiel Kreditkarten-Nummern haben, einer Prüfziffer, was bedeutet, dass, wenn ein Mensch den Arten einer Kreditkarte falsch, es ist nur eine 1/10 chance, dass es angenommen werden würde. Sie sind auch Recht unberechenbar, so kann ein hacker nicht nur zufällige Kreditkarten-Nummern in Amazon und hoffe, dass er auch eine gültige Kreditkartennummer. Ebenso ein hacker sollte nicht sprengen Wörterbuch-Attacken zu vorhersagbaren UIDs.
  • Ich verstehe nicht, den Vergleich auch hier. Ich wäre fassungslos, wenn Kreditkarten-Unternehmen verwendet Kreditkarte zahlen, wie die Datenbank-IDs, anstatt speichert Sie als einige stark gesicherte Attribut in einer Tabelle. Dein Kommentar impliziert, dass das wissen über eine ID wäre eine Art Hintertür in der Datenbank. Authentifizierung Art der Verteidigung gegen unbefugten Zugriff auf Daten, die nicht wissen von random-Datenbank Werte.
  • Ich behaupte, dass in diesem Tag und Alter, dass die Prüfziffer auf eine CC ist nicht annähernd so nützlich, wie Sie eine Abfrage gegen die CC-Firma mit der Nummer, dem Namen und CCV-Wert zu überprüfen, zu seinem Besitzer. Der einzige Weg, um sicher wissen, wenn die CC gültig ist, ist eine Abfrage der maßgebliche Quelle.
  • Ich will damit nicht sagen, dass die CC-Nummern sind validiert, indem Sie Ihre Prüfziffer allein. Allerdings scheint es von Vorteil sein, mit wenig Kosten. Die Prüfziffer kann leicht implementiert werden, in effiziente Javascript, und kann der Benutzer sofort weiß, dass er einen Fehler gemacht, während Sie Tippen. IE: Prüfziffern gibt es für die usability, und nicht für Sicherheit.
  • Ich bin nicht einverstanden, dass es einige Kosten, die vor allem rund um ändern. Es ist Aufwand, der mit der Herleitung der Prüfziffer-Algorithmus und Pflege es in das Gesicht einer änderung der Kennung. Kreditkarten sind sehr verbreitet, dass viele Unternehmen erzeugen kann, die Werte (ähnlich wie die Reederei Beispiel gab ich in meinem post). Wenn das system gebaut wird immer die einzige maßgebliche Quelle, dann eine Prüfziffer enthält fast keinen Vorteil IMO.

Schreibe einen Kommentar