Transparante versleuteling (TDE) voor MySQL-tabellen (Windows)
Omgeving voor bevestiging van de bewerking
- MySQL
-
- MySQL 8.0 Community-editie
- Ramen
-
- Windows 11
Vereiste omgeving
- MySQL
-
- MySQL 8.0 Community-editie
- MySQL 8.0 Enterprise Edition
- Ramen
-
- Windows 11
- Vensters 10
- Windows Server
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
voorwaarde
- MySQL-database moet zijn geïnstalleerd
Over transparante versleuteling
Transparante gegevensversleuteling (Enterprise Transparent Data Encryption) is een technologie die versleutelt zoals de naam al doet vermoeden, en het is veiliger dan dit niet te doen. Normaal gesproken is het versleutelen vaak een last voor de uitvoerder omdat het nodig is om versleuteling en ontcijferingsverwerking uit te voeren. De betekenis van dit "transparante" is dat het kan worden versleuteld zonder dat de uitvoerder wijzigingen aanbrengt in de verwerking. Daarom is het een zeer effectieve beveiligingsmaatregel omdat het vanzelf wordt versleuteld na slechts een kleine aanpassing van de instellingen in het begin.
Echter, zoals de zin "het is niet nodig om wijzigingen aan te brengen" suggereert, kunt u, als u daadwerkelijk inlogt op de database, de gegevens normaal zien, en als u de databaserecords van het programma krijgt, kunt u de gegevens normaal zien. Als de verkregen gegevens versleuteld zijn, zal het nodig zijn om wijzigingen aan te brengen in de verwerking, zodat deze niet overeenkomen met de verklaring "er zijn geen wijzigingen nodig in de verwerking".
Dus, wat is precies transparante versleuteling in MySQL, en "opgeslagen databasebestanden" of "tabelbestanden" zijn versleuteld. Zoals ik later zal controleren, is het, zelfs als u het bestand rechtstreeks opent, alleen versleuteld zodat de inhoud niet kan worden gezien, dus het is noodzakelijk om het zo te bedienen dat het niet inlogt op de database in de daadwerkelijke werking.
Maak een tabel op de normale manier en controleer de inhoud
Laten we eerst op de normale manier een tabel en een record maken. Je kunt het maken zoals je wilt, maar deze keer zal ik SQL in Workbench uitvoeren om het te maken. Deze keer zijn we van plan om transparante versleuteling voor de tabel in te stellen, zodat we normaal gesproken een database zullen maken.
CREATE DATABASE `test_database`
Ik maak ook normaal een tafel. Wat de inhoud van de kolom ook is, het kan zijn.
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;
Bewaar een register om de versleuteling te controleren.
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');
Wanneer u een database of tabel maakt, wordt deze standaard in de volgende mappen gemaakt:
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
De map is een verborgen map, dus zorg ervoor dat deze zichtbaar is in de instellingen van Verkenner.
In de map bevindt zich een map met de naam van de database die u hebt gemaakt, dus open deze.
Binnenin bevinden zich bestanden op tabelniveau.
Open dit bestand in een teksteditor zoals Kladblok. Omdat het een binair bestand is, denk ik dat er in feite tekst is die ik niet goed begrijp. Als u onderaan kijkt, ziet u de tekst van het geregistreerde record.
Als het niet op deze manier is versleuteld, kunt u de inhoud van het record kennen door het bestand rechtstreeks te openen. U hoeft niet in te loggen op de database om te weten wat erin zit.
Transparante versleuteling instellen
Om transparante versleuteling in te schakelen, moet u een plug-in installeren. Controleer eerst de opdracht om te zien of de plug-in is opgenomen.
Selecteer MySQL 8.0 Command Line Client in het menu Start om het te starten.
Nadat u uw wachtwoord hebt ingevoerd en bent ingelogd, voert u de volgende opdracht in:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Ik heb het nog niet geïnstalleerd, dus het zou leeg moeten zijn.
Laten we nu de plug-in configureren. Maak eerst de volgende mappen: In feite is de plaats of naam die je maakt prima. Geef het op als een locatie om het sleutelbestand later op te slaan.
- C:\ProgramData\MySQL\mysql-sleutelhanger
Open vervolgens het volgende bestand in een teksteditor.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Voeg de volgende tekst toe aan de onderste ruimte en sla deze op. Als u het bestand niet kunt opslaan met beheerdersrechten, kunt u het opslaan op een andere locatie en vervolgens het bestand overschrijven.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Start de MySQL-service opnieuw. U kunt het opnieuw opstarten met een opdracht.
Na het opnieuw opstarten wordt het bestand automatisch aangemaakt in de opgegeven map.
U kunt de opdracht Plug-in controleren opnieuw uitvoeren om te controleren of de plug-in is geïnstalleerd.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Een coderingstabel maken
Laten we nu een versleutelde tabel maken.
Maak een tabel die lijkt op de tabel die we eerder hadden, maar voeg nu toe aan de opties ENCRYPTION='Y'
.
Deze versleutelingsinstelling lijkt op dit moment niet configureerbaar te zijn in de GUI, dus deze moet met een opdracht worden ingesteld.
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;
Trouwens, voordat u de plug-in instelt, zelfs als u een coderingstabel probeert te maken, ontvangt u de volgende fout.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Als je geen gegevens hebt, weet je niet of ze versleuteld zijn, dus ik zal proberen vergelijkbare gegevens te plaatsen.
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
Er is een tabelbestand gemaakt, dus laten we de inhoud controleren.
Het bestand is versleuteld en de inhoud van het record kan niet worden geverifieerd.
Voorlopig hoef ik me geen zorgen meer te maken dat ik de records binnenin kan lezen door gewoon in te loggen op de server met een derde partij en het tabelbestand rechtstreeks te stelen. Ik denk dat het een eenvoudige beveiligingsinstelling is, omdat het helemaal niet nodig is om de implementatie te veranderen.
Als u zich echter aanmeldt bij de database, kunt u de gegevens normaal bekijken. Als u het beveiligingsniveau wilt verhogen, moet u inlogaccounts voor databases beheren en een afzonderlijk coderingsmechanisme introduceren.
Converteer onderweg naar versleutelde tabellen
Als u in de eerste plaats een niet-versleutelde tabel maakt, kunt u deze later converteren naar een versleutelde tabel. In dat geval kun je het converteren met de volgende SQL:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
voorbeeld
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Zorg er echter voor dat u niet alle tabelbestanden herschrijft, want het duurt lang als er te veel records zijn.