13 Stimmen

MySQL verschlüsselte Spalten

Angenommen, jede Zeile einer Tabelle enthält Daten, die zu einem bestimmten Benutzer gehören. Der Benutzer hat ein Passwort für den Zugang zum System.

Wie kann ich eine Datenspalte mit InnoDB verschlüsseln, so dass niemand außer dem Benutzer, dessen Daten es sind, die Daten lesen kann? Ich dachte an etwas wie die Verwendung einer der MySQL-Verschlüsselungsfunktionen (z.B. AES) mit einem Schlüssel, der auf einem Hash basiert, der aus dem Passwort des Benutzers berechnet wird.

Hat jemand einen Tipp, wie ich das machen kann? Bin ich auf dem richtigen Weg?

Eine der folgenden Antworten

Bei der Änderung des Benutzerpassworts muss der Benutzerschlüssel mit dem neuen Passwort neu verschlüsselt werden, was wesentlich einfacher ist als die Neuverschlüsselung der gesamten Benutzerdaten, die beliebig groß sein können. Der Benutzerschlüssel bleibt während der gesamten Lebensdauer der Benutzerdaten im System gleich.

Wie kann das helfen? Angenommen, das Passwort lautet pass1. Und es gibt eine Reihe von Datensätzen, die mit einem daraus generierten Schlüssel verschlüsselt sind. Wenn der Benutzer nun das Passwort auf pass2 zurücksetzt, habe ich keine Möglichkeit, die Daten zu entschlüsseln, die mit pass1 verschlüsselt wurden. Wenn ein Benutzer das Kennwort komplett vergisst, sind alle verschlüsselten Daten verloren.

0 Stimmen

Auch wenn dies nicht auf Ihre spezielle Situation zutrifft, fand ich diesen Artikel hilfreich, um eine gründlichere Einführung in die damit verbundenen Probleme zu erhalten: i.amniels.com/

0voto

ysth Punkte 91645

Angenommen, das Kennwort lautet pass1. Und es gibt eine Reihe von Datensätzen, die mit einem daraus generierten Schlüssel verschlüsselt sind. Wenn der Benutzer nun das Kennwort auf pass2 zurücksetzt, habe ich keine Möglichkeit, die Daten zu entschlüsseln, die mit pass1 verschlüsselt wurden

Der Schlüssel müsste auf umkehrbare Weise verschlüsselt werden, so dass er mit Pass1 entschlüsselt mit Pass1 entschlüsselt und mit Pass2 wieder verschlüsselt werden kann.

Zusammengefasst:

In der Datenbank wird Folgendes gespeichert: das einseitig verschlüsselte Kennwort (für die Kennwortprüfung), der Chiffrierschlüssel für die anderen Daten, reversibel verschlüsselt unter Verwendung des eindeutigen Kennworts (oder zumindest des Kennworts, das anders verschlüsselt ist, als es in der Datenbank gespeichert ist), und die anderen Daten, reversibel verschlüsselt unter Verwendung des eindeutigen Chiffrierschlüssels.

Wenn Sie die anderen Daten benötigen, müssen Sie das eindeutige (oder anders verschlüsselte als das in der Datenbank gespeicherte) Kennwort haben, den Verschlüsselungsschlüssel auslesen, ihn mit dem Kennwort entschlüsseln und diesen zur Entschlüsselung der anderen Daten verwenden.

Wenn ein Kennwort geändert wird, wird der Verschlüsselungsschlüssel mit dem alten Kennwort entschlüsselt, mit dem neuen Kennwort verschlüsselt und gespeichert.

0voto

Wenn Sie auf die Daten ohne Benutzerinteraktion zugreifen müssen (z. B. für die Datenbankmigration), haben Sie keinen Schlüssel zum Entschlüsseln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X