Läbipaistev krüptimine (TDE) MySQL-i tabelite jaoks (Windows)
Toimingu kinnitamise keskkond
- MySQL
-
- MySQL 8.0 kogukonna väljaanne
- Windows
-
- Windows 11
Nõutav keskkond
- MySQL
-
- MySQL 8.0 kogukonna väljaanne
- MySQL 8.0 Enterprise Edition
- Windows
-
- Windows 11
- Windows 10
- Windowsi server
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
Eeltingimus
- MySQL-i andmebaas peab olema installitud
Läbipaistva krüptimise kohta
Läbipaistev andmete krüptimine (Enterprise Transparent Data Encryption) on tehnoloogia, mis krüpteerib, nagu nimigi ütleb, ja see on turvalisem kui selle tegemata jätmine. Tavaliselt on krüpteerimine sageli rakendajale koormav, kuna on vaja teostada krüpteerimist ja dekrüpteerimist. Selle "läbipaistva" tähendus seisneb selles, et seda saab krüpteerida, ilma et rakendaja töötlemises muudatusi teeks. Seetõttu on see väga tõhus turvameede, kuna see krüpteeritakse iseenesest pärast seadete väikest kohandamist alguses.
Kuid nagu fraas "pole vaja muudatusi teha" viitab sellele, et kui te tegelikult andmebaasi sisse logite, näete andmeid normaalselt ja kui saate andmebaasi kirjed programmist, näete andmeid normaalselt. Kui saadud andmed on krüpteeritud, on vaja töötlemises muudatusi teha, nii et need ei vasta väitele "töötlemises ei ole vaja muudatusi teha".
Niisiis, mis täpselt on MySQL-is läbipaistev krüptimine ja "salvestatud andmebaasifailid" või "tabelifailid" on krüpteeritud. Nagu ma hiljem kontrollin, on isegi kui avate faili otse, krüpteeritud see ainult nii, et sisu pole näha, seega on vaja seda kasutada nii, et see ei logiks tegelikus töös andmebaasi sisse.
Looge tabel tavapäraselt ja kontrollige sisu
Kõigepealt loome tabeli ja kirje tavapäraselt. Saate selle luua nii, nagu soovite, kuid seekord käivitan selle loomiseks SQL-i Workbenchis. Seekord plaanime seadistada tabeli läbipaistva krüptimise, nii et loome andmebaasi tavapäraselt.
CREATE DATABASE `test_database`
Tavaliselt teen ka laua. Ükskõik, milline on veeru sisu, see võib olla.
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;
Krüptimise kontrollimiseks pidage arvestust.
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');
Andmebaasi või tabeli loomisel luuakse see vaikimisi järgmistesse kaustadesse.
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
Kaust on peidetud kaust, seega veenduge, et see oleks File Exploreri seadetes nähtav.
Kausta sees on kaust teie loodud andmebaasi nimega, nii et avage see.
Sees on tabelitaseme failid.
Avage see fail tekstiredaktoris, näiteks Notepadis. Kuna tegemist on binaarfailiga, arvan, et põhimõtteliselt on seal tekst, millest ma hästi aru ei saa. Kui vaatate allserva, näete registreeritud kirje teksti.
Kui see pole sel viisil krüpteeritud, saate kirje sisu teada lihtsalt faili otse avades. Te ei pea andmebaasi sisse logima, et teada saada, mis seal on.
Läbipaistva krüptimise seadistamine
Läbipaistva krüptimise lubamiseks peate installima pistikprogrammi. Esmalt kontrollige käsku, et näha, kas pistikprogramm on kaasas.
Valige menüüst Start MySQL 8.0 käsurea klient, et see käivitada.
Kui olete parooli sisestanud ja sisse loginud, sisestage järgmine käsk:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Ma pole seda veel installinud, nii et see peaks olema tühi.
Nüüd konfigureerime pistikprogrammi. Esmalt looge järgmised kaustad: Tegelikult on teie loodud koht või nimi hea. Määrake see võtmefaili hilisema salvestamise asukohaks.
- C:\ProgramData\MySQL\mysql-võtmehoidja
Seejärel avage tekstiredaktoris järgmine fail.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Lisage alumisse ruumi järgmine tekst ja salvestage see. Kui te ei saa administraatoriõigustega salvestada, saate selle salvestada mõnda teise asukohta ja seejärel faili üle kirjutada.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Taaskäivitage MySQL-i teenus. Saate selle käsuga taaskäivitada.
Pärast taaskäivitamist luuakse fail automaatselt määratud kausta.
Saate uuesti käivitada käsu Kontrolli pistikprogrammi, et kontrollida, kas pistikprogramm on installitud.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Krüpteerimistabeli loomine
Nüüd loome krüptitud tabeli.
Looge tabel, mis sarnaneb meie varasemaga, kuid lisage nüüd valikutele ENCRYPTION='Y'
.
Tundub, et see krüpteerimisseade ei ole praegu GUI-s konfigureeritav, seega tuleb see käsuga määrata.
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;
Muide, enne pistikprogrammi seadistamist, isegi kui proovite luua krüpteerimistabelit, saate järgmise veateate.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Kui teil pole andmeid, siis te ei tea, kas need on krüpteeritud, nii et proovin sarnaseid andmeid panna.
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
Tabelifail on loodud, nii et kontrollime sisu.
Fail on krüptitud ja kirje sisu ei saa kontrollida.
Esialgu ei pea ma enam muretsema selle pärast, et saan sees olevaid kirjeid lugeda, logides lihtsalt kolmanda osapoolega serverisse sisse ja varastades tabelifaili otse. Ma arvan, et see on lihtne turvaseade, sest rakendust pole vaja üldse muuta.
Kui aga logite andmebaasi sisse, näete andmeid tavapäraselt. Kui soovite turvalisuse taset tõsta, peate haldama andmebaasi sisselogimiskontosid ja võtma kasutusele eraldi krüpteerimismehhanismi.
Teisendage teel krüptitud tabeliteks
Kui loote krüptimata tabeli, saate selle hiljem krüptitud tabeliks teisendada. Sel juhul saate selle teisendada järgmise SQL-iga:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
näide
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Siiski olge ettevaatlik, et mitte kõiki tabelifaile ümber kirjutada, kuna see võtab kaua aega, kui kirjeid on liiga palju.