Eigenen Primärkey nutzen? Performance ? (MySQL)

Hallo,

wie kann man mit MySQL in der Praxis einen eigenen Primärkey nutzen ?

Folgendes Szenario: Jeder Nutzer eines Onlinedienstes sollte einen eindeutigen(„uniquen“) Key besitzen mit dem auf seinen Datensatz zugegriffen werden kann. Ein Autoinkrement Feld kann aber nicht verwendet werden, da sonst die Gefahr besteht, dass andere auf die Datensätze von Dritten zugreifen können (durch Experimentieren oder systematisches Brute and Force). (Es erfolgt nämlich keine Passwortabfrage, der Key ist alleiniger Zugangsschlüssel)

Bei den Key sollte es sich um einen ca 15 Zeichen langen Key,der nur aus _Grossbuchstanben_ besteht .

Kann man derartige Keys mit MySQL erzeugen? Wenn ja wie?
(Meines Wissens nicht? Ich würde den nun per Java generieren und an das DBMS per SQL zurückliefern.)

Wie sieht das dann konkret beim Anlegen eines Datensatzes aus. Es besteht ja immer (theoretisch) die Gefahr, dass ein Key doch bereits existiert (da diese nicht vom DBMS systematisch generiert und vergeben werden). Wie wird das in der Praxis gemacht, erzeuge ich erst einen leeren Datensatz mit dem Key und wenn das DBMS keinen Fehler zurückliefert, dann update ich die restlichen „Datensatzfelder“? Oder versuche ich gleich den gesamten Datensatz inkl. dem neuen Key zu schreiben? und warte dann auf eine Fehlermeldung.

Macht es Sinn, dass DBS aus Performancegründen einen eigenen Autorgenerierten Key (INT Auto_Increment) nutzen zu lassen und meinen eigenen Key nur als eine zusätzlcihe Referenz auf den DAtensatz zu nutzen? Sind derartige (lange) slebstgenerierte CHAR basiertes Keys gleich performant wie ein INT Auto_Increment?

Vielen DAnk
Thomas

Die Frage sollte viel eher lauten, warum Du unbedingt einen sprechenden Schlüssel verwenden willst. Zur Identifizierung des Datensatzes solltest Du einen ganz normalen auto_increment Eintrag benutzen, wobei in der Tabelle ein Feld existiert, um den Nutzer eindeutig zu identifizieren. In der Abfrage gehst Du simpel alle Datensätze durch, bis der (z.B. als Cookie gespeicherte) Schlüssel zu dem in der Tabelle gespeicherten „Schloss“ passt.

Im übrigen ist ein Schlüssel, der nur aus Buchstaben besteht, genau so anfällig für Attacken wie ein inkrementaler INT-Schlüssel.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi.

Die Identifikation eines Benutzers sollte ja nicht nur über den PK gehen, sondern mittels Login- und Passwort geschützt sein. Dabei sollte dann die Kombination username - passwort unique sein.

mfG,

J.P.Jarolim

Die Identifikation eines Benutzers sollte ja nicht nur über
den PK gehen, sondern mittels Login- und Passwort geschützt
sein.

Stimmt.

Dabei sollte dann die Kombination username - passwort
unique sein.

Richtigerweise sollte aber der Username allein unique sein.

Stefan

C’est vrai
Guter Einwand :wink:

mfG,

J.P.Jarolim