Transparente Verschlüsselung (TDE) für MySQL-Tabellen (Windows)
Umgebung für die Betriebsbestätigung
- MySQL (Englisch)
-
- MySQL 8.0 Community Edition
- Fenster
-
- Windows 11
Erforderliche Umgebung
- MySQL (Englisch)
-
- MySQL 8.0 Community Edition
- MySQL 8.0 Enterprise-Ausgabe
- Fenster
-
- Windows 11
- Windows 10
- Windows-Server
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
Vorbedingung
- MySQL-Datenbank muss installiert sein
Informationen zu Transparent Encryption
Transparent Data Encryption (Enterprise Transparent Data Encryption) ist eine Technologie, die verschlüsselt, wie der Name schon sagt, und sie ist sicherer, als dies nicht zu tun. Normalerweise ist die Verschlüsselung oft eine Belastung für den Implementierer, da die Ver- und Entschlüsselungsverarbeitung durchgeführt werden muss. Die Bedeutung dieses "transparent" besteht darin, dass es verschlüsselt werden kann, ohne dass der Implementierer Änderungen an der Verarbeitung vornimmt. Daher ist es eine sehr effektive Sicherheitsmaßnahme, da sie nach nur einer kleinen Anpassung der Einstellungen zu Beginn von selbst verschlüsselt wird.
Wie jedoch der Satz "keine Notwendigkeit, Änderungen vorzunehmen" andeutet, können Sie die Daten normal sehen, wenn Sie sich tatsächlich bei der Datenbank anmelden, und wenn Sie die Datenbankdatensätze vom Programm abrufen, können Sie die Daten normal sehen. Wenn die erhaltenen Daten verschlüsselt sind, müssen Änderungen an der Verarbeitung vorgenommen werden, so dass sie nicht mit der Aussage "Es sind keine Änderungen an der Verarbeitung erforderlich" übereinstimmen.
Was genau ist also transparente Verschlüsselung in MySQL, und "gespeicherte Datenbankdateien" oder "Tabellendateien" werden verschlüsselt. Wie ich später überprüfen werde, wird die Datei, auch wenn sie direkt geöffnet wird, nur verschlüsselt, so dass der Inhalt nicht sichtbar ist, so dass es notwendig ist, sie so zu betreiben, dass sie sich im tatsächlichen Betrieb nicht in die Datenbank einloggt.
Erstellen Sie normal eine Tabelle und überprüfen Sie den Inhalt
Zuerst erstellen wir normal eine Tabelle und einen Datensatz. Sie können es erstellen, wie Sie möchten, aber dieses Mal führe ich SQL in Workbench aus, um es zu erstellen. Dieses Mal planen wir, eine transparente Verschlüsselung für die Tabelle einzurichten, sodass wir normal eine Datenbank erstellen.
CREATE DATABASE `test_database`
Normalerweise mache ich auch einen Tisch. Was auch immer der Inhalt der Spalte ist, er kann es 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;
Führen Sie Aufzeichnungen, 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 in den folgenden Ordnern erstellt:
- C:\Programmdaten\MySQL\MySQL Server 8.0\Daten
ProgramData
Da es sich bei dem Ordner um einen versteckten Ordner handelt, stellen Sie also sicher, dass er in den Einstellungen des Datei-Explorers sichtbar ist.
In dem Ordner befindet sich ein Ordner mit dem Namen der Datenbank, die Sie erstellt haben, also öffnen Sie ihn.
Darin befinden sich Dateien auf Tabellenebene.
Öffnen Sie diese Datei in einem Texteditor, z. B. Editor. Da es sich um eine Binärdatei handelt, denke ich, dass es im Grunde genommen Text gibt, den ich nicht gut verstehe. Wenn Sie nach unten schauen, sehen Sie den Text des registrierten Datensatzes.
Wenn es nicht auf diese Weise verschlüsselt ist, können Sie den Inhalt des Datensatzes erfahren, indem Sie die Datei direkt öffnen. Sie müssen sich nicht bei der Datenbank anmelden, um zu wissen, was sich darin befindet.
Einrichten einer transparenten Verschlüsselung
Um die transparente Verschlüsselung zu aktivieren, müssen Sie ein Plug-in installieren. Überprüfen Sie zunächst den Befehl, um zu sehen, ob das Plugin enthalten ist.
Wählen Sie MySQL 8.0 Command Line Client aus dem Startmenü aus, um ihn zu starten.
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%';
Ich habe es noch nicht installiert, also sollte es leer sein.
Lassen Sie uns nun das Plugin konfigurieren. Erstellen Sie zunächst die folgenden Ordner: Tatsächlich ist der Ort oder Name, den Sie erstellen, in Ordnung. Geben Sie es als Speicherort für die spätere Speicherung der Schlüsseldatei an.
- C:\Programmdaten\MySQL\mysql-Schlüsselbund
Öffnen Sie dann die folgende Datei in einem Texteditor.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Fügen Sie den folgenden Text in das untere Feld ein, und speichern Sie ihn. Wenn Sie nicht mit Administratorrechten speichern können, können Sie es an einem anderen Speicherort speichern und dann die Datei ü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 mit einem Befehl neu starten.
Nach dem Neustart wird die Datei automatisch im angegebenen Ordner erstellt.
Sie können den Befehl Plug-in überprüfen erneut ausführen, um zu überprüfen, ob das Plug-In installiert ist.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Erstellen einer Verschlüsselungstabelle
Erstellen wir nun eine verschlüsselte Tabelle.
Erstellen Sie eine Tabelle ähnlich der, die wir zuvor hatten, aber fügen Sie jetzt zu den Optionen ENCRYPTION='Y'
hinzu .
Diese Verschlüsselungseinstellung scheint derzeit nicht in der GUI konfigurierbar zu sein, daher muss sie per Befehl festgelegt 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, bevor Sie das Plugin einrichten, erhalten Sie den folgenden Fehler, auch wenn Sie versuchen, eine Verschlüsselungstabelle zu erstellen.
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, ähnliche 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
Es wurde eine Tabellendatei erstellt, also überprüfen wir den Inhalt.
Die Datei wurde verschlüsselt und der Inhalt des Datensatzes kann nicht überprüft werden.
Vorerst muss ich mir keine Sorgen mehr machen, dass ich die darin enthaltenen Datensätze lesen kann, indem ich mich einfach mit einem Drittanbieter auf dem Server anmelde und die Tabellendatei direkt stehle. Ich denke, es ist eine einfache Sicherheitseinstellung, da es überhaupt nicht notwendig ist, die Implementierung zu ändern.
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 die Anmeldekonten für die Datenbank verwalten und einen separaten Verschlüsselungsmechanismus einführen.
Konvertieren Sie unterwegs in verschlüsselte Tabellen
Wenn Sie zunächst eine unverschlüsselte Tabelle erstellen, können Sie sie später in eine verschlüsselte Tabelle konvertieren. In diesem Fall können Sie es mit der folgenden SQL konvertieren:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
Beispiel
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Achten Sie jedoch darauf, nicht alle Tabellendateien neu zu schreiben, da dies bei zu vielen Datensätzen sehr lange dauern kann.