Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-verschlüsselte Spalten

Ich weiß nicht, ob es viel Sinn macht, Daten mit dem Passwort-Hash des Benutzers zu verschlüsseln, insbesondere wenn Sie den Hash selbst in der Datenbank behalten. In diesem Fall kann jeder, der auf die verschlüsselten Daten zugreifen kann, auch auf den Passwort-Hash zugreifen und die Daten entschlüsseln.

Ein anderer Ansatz wäre, die Daten mit dem anwendungsspezifischen Schlüssel zu verschlüsseln, der mit einigen benutzerspezifischen Daten gesalzen ist. Dann stehen Sie jedoch vor einem weiteren Problem:Wie Sie den Anwendungsschlüssel sicher speichern. Auf diese Frage weiß ich keine einfache Antwort, aber es ist wahrscheinlich gut genug, sie in Ihrem Quellcode zu belassen, wenn Sie befürchten, dass Ihre Datenbankdaten kompromittiert werden können, aber nicht der Quellcode selbst, z. wenn Ihre Datenbank extern gespeichert ist (denken Sie an Amazon S3).

Das Salten des App-Schlüssels mit dem Passwort des Benutzers hilft, wenn Sie nur den Hash des Passworts in der Datenbank behalten, kann aber eine weitere Sicherheitslücke einführen:Sie müssen das Passwort des Benutzers in der Anwendungssitzung im Klartext aufbewahren.

Die technische Lösung ist recht einfach und Beispielcode ist verfügbar . Sie könnten es wie folgt ändern, um die Daten mit dem Anwendungspasswort zu verschlüsseln, das mit Passwort-Hash gesalzen ist:

INSERT INTO secure_table VALUES (
  1,
  AES_ENCRYPT(
    'plain text data',
    CONCAT(@application_password, @user_password))
);

In jedem Fall müssten Sie Ihr Anwendungspasswort irgendwo speichern, daher glaube ich nicht, dass es einen einfachen Ansatz gibt, der perfekte Sicherheit bietet.

Ein anderer Ansatz, den ich mir vorstellen kann, besteht darin, den Benutzer nach einer kurzen PIN zu fragen, die Sie als Verschlüsselungsschlüssel verwenden könnten. Die PIN würde aber nicht in der Datenbank gespeichert Sie müssten den Benutzer jedes Mal danach fragen, wenn Sie auf seine Daten zugreifen.

Und natürlich müssen Sie an die Machbarkeit der Verschlüsselung denken. Sie können es ohne Entschlüsselung nicht indizieren oder durchsuchen. Es wird wahrscheinlich für einen begrenzten Datensatz benötigt (z. B. Kreditkartennummer), aber ich würde damit nicht zu weit gehen.