Erzwingen der transparenten Verschlüsselung (TDE) für MySQL-Tabellen (Windows-Version)

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Betriebsumgebung

MySQL (MySQL)
  • MySQL 8.0 Community Edition
Fenster
  • Windows 11

Voraussetzungen

MySQL (MySQL)
  • MySQL 8.0 Community Edition
  • MySQL 8.0 Enterprise Edition
Fenster
  • Windows 11
  • Windows 10 (Englisch)
Windows Server
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

Vorbedingung

  • Eine Datenbank für MySQL ist installiert.

Informationen zur transparenten Verschlüsselung

Enterprise Transparent Data Encryption ist, wie der Name schon sagt, eine Verschlüsselungstechnologie, die sicherer ist als alles, was dies nicht tut. Normalerweise ist es beim Verschlüsseln oft eine Belastung für den Implementierer, da es notwendig ist, eine Ver- und Entschlüsselungsverarbeitung durchzuführen. Die Bedeutung dieses Namens "transparent" ist, dass er verschlüsselt werden kann, ohne dass der Implementierer Änderungen am Prozess vornimmt. Wenn Sie also zu Beginn ein paar Änderungen an den Einstellungen vornehmen, wird der Rest ohne Erlaubnis verschlüsselt, es handelt sich also um eine sehr effektive Sicherheitsmaßnahme.

Wie der Satz "keine Notwendigkeit, etwas zu ändern" andeutet, können Sie die Daten jedoch normal sehen, wenn Sie sich tatsächlich bei der Datenbank anmelden, und wenn Sie den Datenbankeintrag aus dem Programm abrufen, können Sie die Daten normal sehen. Wenn die erfassten Daten verschlüsselt sind, muss der Prozess geändert werden, so dass er nicht mit der Formulierung "Keine Notwendigkeit, den Prozess zu ändern" übereinstimmt.

Dann wird in MySQL verschlüsselt, was genau eine transparente Verschlüsselung ist, "gespeicherte Datenbankdateien" oder "Tabellendateien" unterliegen der Verschlüsselung. Wie wir später überprüfen werden, verschlüsselt es die Datei nur, selbst wenn Sie sie direkt öffnen, so dass Sie den Inhalt nicht sehen können, so dass es notwendig ist, sie so zu betreiben, dass sie im tatsächlichen Betrieb nicht in der Datenbank angemeldet ist.

Erstellen Sie wie gewohnt eine Tabelle und überprüfen Sie den Inhalt

Zuerst erstellen wir eine Tabelle und Datensätze wie gewohnt. Sie können es nach Belieben erstellen, aber in diesem Fall erstellen wir es durch Ausführen von SQL in Workbench. In diesem Fall planen wir, eine transparente Verschlüsselung für die Tabelle festzulegen, sodass wir die Datenbank normal erstellen.

CREATE DATABASE `test_database`

Der Tisch wird auch normal gemacht. Der Inhalt der Spalte kann ein beliebiger Inhalt sein.

CREATE TABLE `plain_user` (
  `id` int NOT NULL,
  `name` varchar(32) ,
  `age` int ,
  `address` varchar(256) ,
  `phone` varchar(32) ,
  `email` varchar(128) ,
  `remarks` varchar(1024) ,
  `height` decimal(5, 2) ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Ich füge auch einen zufälligen Datensatz ein, um die Verschlüsselung zu überprüfen.

INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('1','名前1','11','宮城県仙台市1','000-0000-0001','example1@example.com','備考1','170.00');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('2','名前2','12','宮城県仙台市2','000-0000-0002','example2@example.com','備考2','171.01');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('3','名前3','13','宮城県仙台市3','000-0000-0003','example3@example.com','備考3','172.02');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('4','名前4','14','宮城県仙台市4','000-0000-0004','example4@example.com','備考4','173.03');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('5','名前5','15','宮城県仙台市5','000-0000-0005','example5@example.com','備考5','174.04');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('6','名前6','16','宮城県仙台市6','000-0000-0006','example6@example.com','備考6','175.05');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('7','名前7','17','宮城県仙台市7','000-0000-0007','example7@example.com','備考7','176.06');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('8','名前8','18','宮城県仙台市8','000-0000-0008','example8@example.com','備考8','177.07');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('9','名前9','19','宮城県仙台市9','000-0000-0009','example9@example.com','備考9','178.08');
INSERT INTO `test_database`.`plain_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('10','名前10','20','宮城県仙台市10','000-0000-0010','example10@example.com','備考10','179.09');

Wenn Sie eine Datenbank oder Tabelle erstellen, wird sie standardmäßig im folgenden Ordner erstellt.

  • C:\ProgramData\MySQL\MySQL Server 8.0\Data

ProgramData Der Ordner ist ausgeblendet, also machen Sie ihn in den Explorer-Einstellungen sichtbar.

In dem Ordner befindet sich ein Ordner mit dem Namen der Datenbank, die Sie erstellt haben, also öffnen Sie ihn.

Darin befindet sich eine Tabellen-für-Tabelle-Datei.

Öffnen Sie diese Datei in einem Texteditor, z. B. Editor. Da es sich um eine Binärdatei handelt, denke ich, dass es im Grunde eine Textzeile gibt, die ich nicht gut verstehe. Wenn Sie nach unten schauen, sehen Sie den Text des registrierten Datensatzes.

Wenn sie nicht auf diese Weise verschlüsselt wird, ist der Inhalt des Datensatzes auch dann bekannt, wenn die Datei direkt geöffnet wird. Sie müssen sich nicht bei der Datenbank anmelden, um zu wissen, was sich darin befindet.

Konfigurieren der Einstellungen für die transparente Verschlüsselung

Um die transparente Verschlüsselung zu aktivieren, müssen Sie ein Plug-in installieren. Überprüfen Sie zunächst, ob das Plug-In im Befehl enthalten ist.

Starten Sie es, indem Sie "MySQL 8.0 Command Line Client" aus dem Startmenü auswählen.

Nachdem Sie Ihr Passwort eingegeben und sich angemeldet haben, geben Sie den folgenden Befehl ein:

SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';

Da Sie es noch nicht installiert haben, sollte es leer sein.

Lassen Sie uns nun das Plug-in einrichten. Erstellen Sie zunächst die folgenden Ordner: Tatsächlich spielt es keine Rolle, wo Sie es erstellen oder welchen Namen es hat. Geben Sie es als Speicherort an, an dem Sie die Schlüsseldatei später speichern möchten.

  • C:\ProgramData\MySQL\mysql-keyring

Öffnen Sie als Nächstes die folgende Datei in einem Texteditor:

  • C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

Fügen Sie den folgenden Text in den leeren Bereich am unteren Rand ein und speichern Sie ihn. Wenn Sie die Datei nicht mit Administratorrechten speichern können, können Sie sie an einem anderen Speicherort speichern und die Datei dann überschreiben.

early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring

Starten Sie den MySQL-Dienst neu. Sie können es auch mit dem Befehl neu starten.

Beim Neustart wird die Datei automatisch im angegebenen Ordner erstellt.

Sie können überprüfen, ob das Plug-In installiert ist, indem Sie den Befehl check plug-in erneut ausführen.

SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';

Erstellen einer verschlüsselten Tabelle

Lassen Sie uns nun eine verschlüsselte Tabelle erstellen. Erstellen Sie eine Tabelle, die der vorherigen ähnelt, aber dieses Mal die ENCRYPTION='Y' Optionen erweitert. Diese Verschlüsselungseinstellung scheint derzeit in der GUI nicht möglich zu sein, daher muss sie mit einem Befehl gesetzt werden.

CREATE TABLE `encrypt_user` (
  `id` int NOT NULL,
  `name` varchar(32) ,
  `age` int ,
  `address` varchar(256) ,
  `phone` varchar(32) ,
  `email` varchar(128) ,
  `remarks` varchar(1024) ,
  `height` decimal(5, 2) ,
PRIMARY KEY (`id`)
) ENCRYPTION='Y' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Übrigens, selbst wenn Sie versuchen, eine verschlüsselte Tabelle zu erstellen, wird vor der Konfiguration des Plug-Ins der folgende Fehler angezeigt.

Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.
キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。

Wenn Sie keine Daten haben, wissen Sie nicht, ob sie verschlüsselt sind, also werde ich versuchen, die gleichen Daten einzugeben.

INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('1','名前1','11','宮城県仙台市1','000-0000-0001','example1@example.com','備考1','170.00');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('2','名前2','12','宮城県仙台市2','000-0000-0002','example2@example.com','備考2','171.01');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('3','名前3','13','宮城県仙台市3','000-0000-0003','example3@example.com','備考3','172.02');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('4','名前4','14','宮城県仙台市4','000-0000-0004','example4@example.com','備考4','173.03');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('5','名前5','15','宮城県仙台市5','000-0000-0005','example5@example.com','備考5','174.04');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('6','名前6','16','宮城県仙台市6','000-0000-0006','example6@example.com','備考6','175.05');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('7','名前7','17','宮城県仙台市7','000-0000-0007','example7@example.com','備考7','176.06');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('8','名前8','18','宮城県仙台市8','000-0000-0008','example8@example.com','備考8','177.07');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('9','名前9','19','宮城県仙台市9','000-0000-0009','example9@example.com','備考9','178.08');
INSERT INTO `test_database`.`encrypt_user` (`id`,`name`,`age`,`address`,`phone`,`email`,`remarks`,`height`) VALUES ('10','名前10','20','宮城県仙台市10','000-0000-0010','example10@example.com','備考10','179.09');

encrypt_user Da die Tabellendatei erstellt wurde, überprüfen wir den Inhalt.

Die Datei wurde verschlüsselt, und der Inhalt des Datensatzes kann nicht überprüft werden.

Bis auf Weiteres müssen Sie sich keine Sorgen mehr machen, dass ein Dritter die darin enthaltenen Datensätze liest, indem Sie sich einfach beim Server anmelden und die Tabellendatei direkt stehlen. Es besteht überhaupt keine Notwendigkeit, die Implementierung zu ändern, daher denke ich, dass es sich um eine einfache Sicherheitseinstellung handelt.

Wenn Sie sich jedoch bei der Datenbank anmelden, können Sie die Daten normal sehen. Wenn Sie das Sicherheitsniveau erhöhen möchten, müssen Sie das Datenbank-Anmeldekonto gut verwalten und einen separaten Verschlüsselungsmechanismus einführen.

Konvertieren Sie dabei in eine verschlüsselte Tabelle

Wenn Sie zunächst eine unverschlüsselte Tabelle erstellen, können Sie diese später in eine verschlüsselte Tabelle konvertieren. In diesem Fall können Sie es mit der folgenden SQL-Anweisung konvertieren:

use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';

Beispiel

use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';

Bitte beachten Sie jedoch, dass es bei vielen Datensätzen einige Zeit dauern kann, da alle Tabellendateien neu geschrieben werden.