Hallo,
ich habe auf euren Rat, aus meinem letzten Thread, jetzt eine normalisierte SQLite Datenbank. Jetzt wollte ich fragen wie ihr die Struktur findet und ggf. Verbesserungvorschläge habt?
Das Programm von dem die Datenbank ausgelesen wird hat mehrere Nutzer wovon jeder eine eigene ID besitzt. Ich will alle Messsdaten in die selbe Tabelle schreiben und dann beim auslesen dem Nutzer nur die Messsdaten von den Stationen anzeigen, die ihm gehören. Ist dafür die Datenbankstruktur geeignet?
werttyp: id | name
messstationen: id | name | owner_id
messung: id | messstation_id | werttyp_id | timestamp | wert
SQLite Datenbank Struktur
Das ist viel mehr die Nutzer Tabelle welche allerdings in der Nutzerdatenbank liegt. Jeder Nutzer hat wie schon gesagt eine eigene ID und wenn er jetzt eine neue Station erstellt wird diese als owner_id mit abgespeichert.
Das eine Soll ja eine Große Datenbank mit den Messdaten werden. Und das andere dachte ich wird eine kleine wo die Benutzer drin sind die eigentlich nur zum Login gebraucht wird. Ist das so nicht sinnvoll das ganze abzugrenzen?
Oke also ich soll meine Benutzer in der selben Datenbank eine Tabelle anlegen. Die user Tabelle hat übrigens diese Struktur. Gibt es noch andere Verbesserungsvorschläge oder Kritik?
Das Passwort wird als hash abgespeichert.
user: name | password | id
Das Passwort wird als hash abgespeichert.
user: name | password | id
Ist das hier oke?
Code: Alles auswählen
def hash_password(password):
# uuid is used to generate a random number
salt = uuid.uuid4().hex
return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt
Leider nicht. Wenn du jedes mal einen neuen, zufälligen Salt erzeugst, den du dir nirgendwo merkst, hast du ja keine Möglichkeit, die Passwörter später zu prüfen. In der Praxis sehe ich bei Webanwendungen meistens, dass irgendwo in einer Config-Datei ein fester, zufällig erzeugter Wert steht, der als Salt verwendet wird. Man kann auch für jeden Benutzer einen individuellen Salt generieren, den man sich zusätzlich merkt. In dem Fall nimmt man dann ggf. noch zusätzlich einen festen Wert aus einer Config-Datei hinzu.
Wenn beide Programme, von denen die Rede war, von dir sind und du nicht die Datenbank einer dritten Software anzapfst, würde ich, wie __deets__ ebenfalls vorgeschlagen hat, alles in eine Datenbank packen.
Zuletzt geändert von nezzcarth am Dienstag 28. Mai 2019, 18:42, insgesamt 1-mal geändert.
Komisch eigentlich klappt es mit dieser Funktion die Passwörter wieder richtig darauß auszulesen.
Code: Alles auswählen
def check_password(hashed_password, user_password):
password, salt = hashed_password.split(':')
return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest()
Du hast recht. Ich habe nicht richtig geschaut; du merkst dir den Salt als Teil des Hashs. Das sollte gegen Rainbowtables schon reichen; mache ich nur selbst nie so.
Zuletzt geändert von nezzcarth am Dienstag 28. Mai 2019, 19:01, insgesamt 1-mal geändert.