Was ist ein guter Weg, um eine MySQL-Datenbank zu verschlüsseln, und ist es das wert?

20

Ich weiß, dass ich bestimmte Felder einer Datenbank verschlüsseln kann, aber ich bin daran interessiert, jedes Feld der Datenbank zu verschlüsseln. Ich möchte sicherstellen, dass niemand, der Zugriff auf eine MySQL-Shell erhält, aber keinen Zugriff auf einen Entschlüsselungsschlüssel hat, überhaupt nichts aus der Datenbank lesen kann.

Ich möchte auch sicherstellen, dass jemand, der Root-Zugriff auf den Computer hatte, aber keinen Entschlüsselungsschlüssel hatte, die Daten nicht lesen konnte.

Wie soll ich das machen? Ist das sinnvoll? Ich mache mir Sorgen, wenn jemand Zugriff auf die MySQL-Datenbank hat, wird er unweigerlich Zugriff auf den Schlüssel haben. Das macht also keinen Sinn. Vermisse ich etwas?

Snitse
quelle
5
Haben Sie darüber nachgedacht, die DB auf einem dedizierten Volume zu speichern und mit dm-crypt und LUKS zu verschlüsseln? Sicher, es ist nicht das, wonach Sie fragen, aber alles wird verschlüsselt. Sie können die Schlüsseldatei sogar mit GPG verschlüsseln.
Dsljanus

Antworten:

10

Minimale AES- und DES-Verschlüsselung auf Feldebene ist verfügbar: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Niemand kann Daten lesen, ohne für jede Abfrage einen Schlüssel anzugeben (oder sie den Triggern / Prozeduren hinzuzufügen).

Beispiel:

EINFÜGEN:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

und SELECT:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

Dies erfordert auch eine SSL-Verbindung zur Datenbank.

Und auf einer niedrigeren Ebene können Sie auch das Dateisystem verschlüsseln.

GioMac
quelle
2
Hinweis: Sofern die Datenbank nicht lokal ist, müssen Sie die Verbindung irgendwie verschlüsseln, oder das Kennwort und der Schlüssel werden als Klartext über das Netzwerk gesendet. Siehe security.stackexchange.com/questions/45838/…
Aaron Digulla,
AES, MD5 ist alt und hat Exploits. Was sind neue Verschlüsselungen?
YumYumYum
Ich weiß, dass dies nur ein Beispiel für das Ver- / Entschlüsseln eines Felds ist, aber das Verwenden des Kennworts als Beispiel ist eine schlechte Idee. Sie sollten niemals unverschlüsselte Passwörter mit oder ohne Verschlüsselung in Ihrer Datenbank haben.
Caedmon
Bei dieser Antwort geht es um die Entschlüsselung auf Feldebene, aber nicht um die Frage: "Ein guter Weg, eine MySQL-Datenbank zu verschlüsseln" ... "Ich weiß, dass ich bestimmte Felder einer Datenbank verschlüsseln kann, aber ich bin daran interessiert, alle zu verschlüsseln Feld der Datenbank. "
LarsH
2

Erstens: Sie speichern Ihren Schlüssel bei der Anwendung und übernehmen die gesamte Verschlüsselung auf Anwendungsebene.

Weiter: Sie stellen sicher, dass sich die MySQL-Instanz und die Anwendung [Server] auf separaten Computern befinden, damit der Angreifer bei einem Root-Kompromiss auf dem MySQL-Server den Schlüssel nicht aus der Anwendungsquelle lesen kann.

Dieser Ansatz scheint übertrieben. Behandeln Sie vertrauliche Daten (Passwörter, Kreditkarten usw.) richtig, aber die Verschlüsselung ist übertrieben. (Und wahrscheinlich kontraproduktiv in der Welt der Primärschlüssel)

Daniel Widrick
quelle