Ausführliche Erläuterung zum Beispiel der MySQL InnoDB-Tablespace-Verschlüsselung

Ausführliche Erläuterung zum Beispiel der MySQL InnoDB-Tablespace-Verschlüsselung

Vorwort

Ab MySQL 5.7.11 unterstützt MySQL die Datenverschlüsselung für InnoDB-Tabellen, die in separaten Tablespaces gespeichert sind. Diese Funktion ermöglicht die Verschlüsselung ruhender Datendateien physischer Tablespaces. Diese Verschlüsselung wird auf Datenseitenebene innerhalb der Engine durchgeführt. Die Datenseite wird verschlüsselt, wenn sie in das Dateisystem geschrieben wird. Die Verschlüsselung verwendet den AES-Algorithmus und die Entschlüsselung wird durchgeführt, wenn sie aus der Datei in den Speicher gelesen wird.

1 Konfigurieren Sie das Verschlüsselungs-Plugin

1.1 Ändern der Konfigurationsdatei

Fügen Sie den folgenden Inhalt zur MySQL-Konfigurationsdatei hinzu [mysqld] x item

plugin_dir=/usr/local/mysql5.7/lib/mysql/plugin # Plugin-Pfad, entsprechend der tatsächlichen Situation anpassen early-plugin-load="keyring_file.so" # Verschlüsselungs-Plugin keyring_file_data=/data/mysql3306/keyring/keyring # Der Pfad existiert nicht und muss erstellt werden innodb_file_per_table=1 # Funktioniert nur auf unabhängigen Tablespaces

1.2 Erstellen Sie die für die Verschlüsselung erforderlichen Pfade und konfigurieren Sie die Berechtigungen

Beachten Sie, dass der in keyring_file_data konfigurierte Schlüsselbund beim Start automatisch erstellt wird. Erstellen Sie ihn in diesem Schritt einfach im entsprechenden Verzeichnis.

mkdir -p /data/mysql3306/keyring/
chown -R mysql:mysql /data/mysql3306/keyring/
chmod 750 /data/mysql3306/keyring

1.3 MySQL neu starten

Starten Sie MySQL einfach neu. Nach dem Neustart werden Sie feststellen, dass die Schlüsselringdatei im Verzeichnis /data/mysql3306/keyring generiert wird.

Beachten Sie, dass Sie nach dem Neustart auch prüfen sollten, ob im MySQL-Fehlerprotokoll relevante Fehlerinformationen vorhanden sind. Wenn kein Fehler vorliegt, fahren Sie fort.

1.4 Plugin-Status prüfen

Nach dem Start können Sie überprüfen, ob das Plug-In wirksam ist

mysql> Wählen Sie PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_Type, PLUGIN_Library aus INFORMATION_SCHEMA.PLUGINS, wobei PLUGIN_NAME wie „Schlüsselringdatei“ ist.
+--------------+------------------+-------------+-----------------+
| PLUGIN-NAME | PLUGIN-STATUS | PLUGIN-Typ | PLUGIN-Bibliothek |
+--------------+------------------+-------------+-----------------+
| Schlüsselringdatei | AKTIV | SCHLÜSSELRING | Schlüsselringdatei.so |
+--------------+------------------+-------------+-----------------+
1 Zeile im Satz (0,01 Sek.)

Oder verwenden Sie den Befehl show plugins, um

2 Testen des verschlüsselten Tablespace

2.1 Erstellen Sie eine neue verschlüsselte Tabelle

Erstellen Sie eine neue Tabelle und fügen Sie ENCRYPTION='Y' hinzu, um den Tablespace zu verschlüsseln

mysql> Tabelle erstellen test1(
ID int Primärschlüssel auto_increment, 
Name varchar(20),
Schlüsselname (Name))
 VERSCHLÜSSELUNG='J';
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

Zu diesem Zeitpunkt ändert sich auch die Schlüsselringdatei

2.2 Neue Daten

Fügen Sie der neu hinzugefügten Testtabelle Testdaten hinzu und zeigen Sie sie an

mysql> einfügen in test1(id,name) Werte(1,'anm'),(2,'keyring');
Abfrage OK, 2 Zeilen betroffen (0,01 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> wähle * aus test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)

2.3 Ändern Sie, ob verschlüsselt werden soll

Test zum Abbrechen der Tablespace-Verschlüsselung

mysql> anzeigen, Tabelle erstellen, Test1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Tabelle | Tabelle erstellen |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | TABELLE ERSTELLEN `test1` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 Primärschlüssel (`id`),
 SCHLÜSSEL `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='Y' |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)

mysql> Tabelle ändern test1 ENCRYPTION='N';
Abfrage OK, 2 Zeilen betroffen (0,04 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> anzeigen, Tabelle erstellen, Test1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Tabelle | Tabelle erstellen |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | TABELLE ERSTELLEN `test1` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 Primärschlüssel (`id`),
 SCHLÜSSEL `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='N' |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle * aus test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)

Neukonfiguration für Verschlüsselung

mysql> Tabelle ändern test1 VERSCHLÜSSELUNG='Y';
Abfrage OK, 2 Zeilen betroffen (0,03 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> wähle * aus test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)

Daher kann die Verschlüsselungsmethode des Tablespace online angepasst werden, ohne dass dies Auswirkungen auf die Datenabfrage hat.

Darüber hinaus können keyring_file_data auch dynamisch angepasst werden, was relativ einfach ist und hier nicht demonstriert wird.

2.4 Statistik-Tablespace-Verschlüsselungstabelle

Wenn Sie wissen möchten, welche Tabellenbereiche verschlüsselt sind, können Sie dies in der Datenwörterbuchtabelle überprüfen.

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='testdb2' und CREATE_OPTIONS='ENCRYPTION="Y"';
+--------------+------------+----------------+
| TABELLE_SCHEMA | TABELLENNAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| testdb2 | test1 | VERSCHLÜSSELUNG="Y" |
+--------------+------------+----------------+
1 Zeile im Satz (0,00 Sek.)

3. Ausnahmebehandlung

Was passiert, wenn die Schlüsselringdatei beschädigt oder versehentlich gelöscht wird?

3.1 Sichern Sie die Schlüsselbunddatei

Um auf Nummer sicher zu gehen, sichern Sie vorher die Schlüsselringdatei

[root@mha1 Schlüsselbund]# cp -p Schlüsselbund Schlüsselbund.bak
[root@mha1 Schlüsselbund]# ll -h 
insgesamt 8.0K
-rw-r----- 1 mysql mysql 155 16. August 09:10 Schlüsselring
-rw-r----- 1 mysql mysql 155 16. August 09:10 keyring.bak

3.2 Schlüsselbund löschen

Löschen Sie die Schlüsselbunddatei direkt

[root@mha1 Schlüsselbund]# rm -f Schlüsselbund
[root@mha1 Schlüsselbund]# ll -h 
insgesamt 4.0K
-rw-r----- 1 mysql mysql 155 16. August 09:10 keyring.bak

3.3 Überprüfen Sie, ob die Daten normal sind

Überprüfen Sie die Daten und ob die neue verschlüsselte Tabelle erfolgreich ist

mysql> wähle * aus test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)


mysql> Tabelle erstellen test2(id int Primärschlüssel auto_increment, Name varchar(20), Schlüsselname(Name)) ENCRYPTION='Y';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

Das heißt, dass zu diesem Zeitpunkt auch bei Verlust der Keyrig-Datei ein normaler Betrieb möglich ist.

3.4 Neustart der Datenbank

Nach dem Neustart der Datenbank werden Sie feststellen, dass die Schlüsselringdatei automatisch erneut generiert wird

Überprüfen Sie nun erneut die Verschlüsselungstabelle

mysql> wähle * aus test1;
FEHLER 3185 (HY000): Hauptschlüssel kann im Schlüsselbund nicht gefunden werden. Prüfen Sie im Serverprotokoll, ob ein Schlüsselbund-Plugin erfolgreich geladen und initialisiert wurde.

Erstellen einer verschlüsselten Tabelle

mysql> Tabelle erstellen test3(id int Primärschlüssel auto_increment, Name varchar(20), Schlüsselname(Name)) ENCRYPTION='Y';
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

Es ist möglich, eine neue Tabelle zu erstellen, da dies einer Initialisierung entspricht.

Stellen Sie anschließend den ursprünglichen Schlüsselbund wieder her und starten Sie die Datenbank neu. Sie werden feststellen, dass es wieder funktioniert.

mysql> wähle * aus test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)

4 Schlüsselbundverwaltung

4.1 Regelmäßige Datensicherung

Sie können täglich Sicherungen durchführen, der Sicherungspfad ist jedoch vom täglichen Backup getrennt und Sie können es in die Zieldatei kopieren, wenn Sie es wiederherstellen müssen.

4.2 Regelmäßige Updates

Aus Sicherheitsgründen muss der Schlüssel aktualisiert werden, wenn der Verdacht auf ein Schlüsselleck besteht. Nach dem Update kann die Originaltabelle weiterhin normal verwendet werden, da die Update-Option den Hauptverschlüsselungsschlüssel ändert und die Tablespace-Schlüssel neu verschlüsselt, den Tablespace jedoch nicht neu verschlüsselt oder entschlüsselt. Aktualisierte Methode:

-- Aktualisieren Sie den Hauptschlüssel
mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

-- Nach dem Update ist der Zugriff auf MySQL weiterhin normal möglich > select * from test1;
+----+---------+
| Ich würde | Name |
+----+---------+
| 1 | anm |
| 2 | Schlüsselanhänger |
+----+---------+
2 Zeilen im Satz (0,00 Sek.)

An diesem Punkt wurde die einfache Verwendung des InnoDB-Tablespace demonstriert. Es gibt noch viele weitere Einzelheiten, Sie können sie in der offiziellen Dokumentation unter https://dev.mysql.com/doc/refman/5.7/en/innodb-data-encryption.html erfahren.

Zusammenfassen

Dies ist das Ende dieses Artikels über die MySQL InnoDB-Tablespace-Verschlüsselung. Weitere Informationen zur MySQL InnoDB-Tablespace-Verschlüsselung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Zusammenfassung der MySQL InnoDB-Architektur
  • Eine kurze Einführung in MySQL InnoDB ReplicaSet
  • Detaillierte Erläuterung der Speicherverwaltung der MySQL InnoDB-Speicher-Engine
  • Hauptfunktionen von MySQL Innodb: Einfügepuffer
  • Zusammenfassung der MySQL InnoDB-Sperren
  • So unterscheiden Sie MySQLs innodb_flush_log_at_trx_commit und sync_binlog
  • Detailliertes Beispiel des MySQL InnoDB-Sperrmechanismus
  • Ausführliche Erläuterung der InnoDB-Sperren in der MySQL-Technologie
  • Ändern Sie die MySQL-Datenbank-Engine in InnoDB
  • Beschreiben Sie kurz die MySQL InnoDB-Speicher-Engine
  • MySQL InnoDB-Quellcodeanalyse für Transaktionssperren

<<:  Kennen Sie alle 24 Methoden zur JavaScript-Schleifendurchquerung?

>>:  Verwendung des Linux-Lesebefehls

Artikel empfehlen

So stoppen Sie die CSS-Animation mittendrin und behalten die Haltung bei

Vorwort Ich bin einmal auf ein schwieriges Proble...

Vue + Element zur dynamischen Anzeige von Hintergrunddaten zu Optionen

brauchen: Implementieren Sie die dynamische Anzei...

Detaillierte Analyse der MySQL-Optimierung von like und = Leistung

Einführung Die meisten Leute, die schon einmal Da...

Implementierungsbeispiel für den Bildupload mit Vue+Element+Springboot

Vor kurzem hatte ich zufällig Kontakt mit dem Pro...

Detaillierte Erklärung der Primärschlüssel und Transaktionen in MySQL

Inhaltsverzeichnis 1. Kommentare zu MySQL-Primärs...

HTML-Subtag und Sup-Tag

Heute stelle ich zwei HTML-Tags vor, die ich nich...

Einführung in die Vue3 Composition API

Inhaltsverzeichnis Überblick Beispiel Warum wird ...

MySQL-Anmelde- und Beendigungsbefehlsformat

Das Befehlsformat für die MySQL-Anmeldung ist: my...

Detaillierte Erläuterung der JS ES6-Codierungsstandards

Inhaltsverzeichnis 1. Umfang des Blocks 1.1. let ...

So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Eine beträchtliche Anzahl von Websites verwendet d...

Binäre Typoperationen in MySQL

Dieser Artikel stellt hauptsächlich die binären O...

Best Practices-Handbuch zum Speichern von Daten in MySQL

Inhaltsverzeichnis Vorwort Verwenden Sie keine Ze...