Was ist eine gute Möglichkeit, eine MySQL-Datenbank zu verschlüsseln, und lohnt es sich?

Was ist eine gute Möglichkeit, eine MySQL-Datenbank zu verschlüsseln, und lohnt es sich?

Ich weiß, dass ich bestimmte Felder einer Datenbank verschlüsseln kann, aber ich möchte jedes Feld der Datenbank 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 etwas aus der Datenbank lesen kann.

Ich möchte außerdem sicherstellen, dass jemand, der Root-Zugriff auf den Computer hat, aber keinen Entschlüsselungsschlüssel besitzt, die Daten nicht lesen kann.

Wie soll ich das machen? Ist das sinnvoll? Ich befürchte, wenn jemand Zugriff auf die MySQL-Datenbank hat, hat er zwangsläufig Zugriff auf den Schlüssel, also macht das keinen Sinn. Übersehe ich etwas?

Antwort1

Es ist eine minimale AES- und DES-Verschlüsselung auf Feldebene 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 den Schlüssel anzugeben (oder ohne ihn den Auslösern/Prozeduren hinzuzufügen).

Beispiel:

EINFÜGEN:

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

und AUSWÄHLEN:

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

Auch daserfordertSSL-Verbindung zur Datenbank.

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

Antwort2

MariaDB hat vor Kurzem eine Verschlüsselung auf Tabellenebene für InnoDB- und XtraDB-Tabellen hinzugefügt. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#angeben, welche-tabellen-verschlüsselt-werden-sollten

MySQL unterstützt auch die Verschlüsselung auf Tabellenebene für InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html

Antwort3

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

Als Nächstes: Sie stellen sicher, dass sich die MySQL-Instanz und der Anwendungsserver auf unterschiedlichen Computern befinden, sodass ein Root-Angriff auf den MySQL-Server es dem Angreifer nicht ermöglicht, den Schlüssel aus der Anwendungsquelle zu lesen.

Dieser Ansatz erscheint übertrieben. Behandeln Sie sensible Daten (Passwörter, Kreditkarten usw.) richtig, aber alles zu verschlüsseln ist übertrieben. (Und in der Welt der Primärschlüssel wahrscheinlich kontraproduktiv.)

verwandte Informationen