Caurspīdīga šifrēšana (TDE) MySQL tabulām (Windows)
Darbības apstiprināšanas vide
- MySQL
-
- MySQL 8.0 kopienas izdevums
- Windows
-
- Operētājsistēma Windows 11
Nepieciešamā vide
- MySQL
-
- MySQL 8.0 kopienas izdevums
- MySQL 8.0 Enterprise izdevums
- Windows
-
- Operētājsistēma Windows 11
- Operētājsistēma Windows 10
- Windows serveris
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
Priekšnosacījumu
- Jāinstalē MySQL datu bāze
Par caurspīdīgu šifrēšanu
Caurspīdīga datu šifrēšana (Enterprise Transparent Data Encryption) ir tehnoloģija, kas šifrē, kā norāda nosaukums, un tā ir drošāka nekā to nedarīt. Parasti, veicot šifrēšanu, tas bieži vien ir apgrūtinājums īstenotājam, jo ir nepieciešams veikt šifrēšanas un atšifrēšanas apstrādi. Šī "caurspīdīga" nozīme ir tāda, ka to var šifrēt, ieviesējam neveicot nekādas izmaiņas apstrādē. Tāpēc tas ir ļoti efektīvs drošības pasākums, jo tas ir šifrēts pats pēc nelielas iestatījumu pielāgošanas sākumā.
Tomēr, kā liecina frāze "nav nepieciešams veikt nekādas izmaiņas", ja jūs faktiski piesakāties datu bāzē, jūs varat redzēt datus normāli, un, ja jūs saņemat datu bāzes ierakstus no programmas, jūs varat redzēt datus normāli. Ja iegūtie dati ir šifrēti, būs nepieciešams veikt izmaiņas apstrādē, tāpēc tas neatbilst apgalvojumam "apstrādei nav nepieciešamas izmaiņas".
Tātad, kas tieši ir caurspīdīga šifrēšana MySQL, un "saglabātie datu bāzes faili" vai "tabulas faili" ir šifrēti. Kā es pārbaudīšu vēlāk, pat ja jūs atverat failu tieši, tas ir tikai šifrēts tā, lai saturu nevarētu redzēt, tāpēc ir nepieciešams to darbināt tā, lai tas faktiski nepieteiktos datu bāzē.
Izveidojiet tabulu parasti un pārbaudiet saturu
Vispirms izveidosim tabulu un ierakstu parasti. Jūs varat to izveidot, kā vēlaties, bet šoreiz es palaidīšu SQL Workbench, lai to izveidotu. Šoreiz mēs plānojam izveidot caurspīdīgu šifrēšanu tabulai, tāpēc mēs izveidosim datu bāzi parasti.
CREATE DATABASE `test_database`
Es arī parasti veidoju tabulu. Neatkarīgi no kolonnas satura, tas var būt.
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;
Saglabājiet ierakstu, lai pārbaudītu šifrēšanu.
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');
Veidojot datu bāzi vai tabulu, tā pēc noklusējuma tiek izveidota šādās mapēs:
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
Mape ir slēpta mape, tāpēc pārliecinieties, vai tā ir redzama failu pārlūka iestatījumos.
Mapes iekšpusē ir mape ar izveidotās datu bāzes nosaukumu, tāpēc atveriet to.
Iekšpusē ir tabulas līmeņa faili.
Atveriet šo failu teksta redaktorā, piemēram, Notepad. Tā kā tas ir binārs fails, es domāju, ka būtībā ir teksts, ko es labi nesaprotu. Ja paskatīsieties apakšā, jūs redzēsiet reģistrētā ieraksta tekstu.
Ja tas nav šifrēts šādā veidā, jūs varat uzzināt ieraksta saturu, vienkārši atverot failu. Jums nav jāpiesakās datu bāzē, lai uzzinātu, kas ir iekšā.
Caurspīdīgas šifrēšanas iestatīšana
Lai iespējotu caurspīdīgu šifrēšanu, ir jāinstalē spraudnis. Vispirms pārbaudiet komandu, lai redzētu, vai spraudnis ir iekļauts.
Izvēlnē Sākt atlasiet MySQL 8.0 komandrindas klientu, lai to palaistu.
Kad esat ievadījis paroli un pieteicies, ievadiet šādu komandu:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Es to vēl neesmu instalējis, tāpēc tam vajadzētu būt tukšam.
Tagad konfigurēsim spraudni. Vispirms izveidojiet šādas mapes: Patiesībā jūsu izveidotā vieta vai nosaukums ir labi. Norādiet to kā atrašanās vietu, kur vēlāk saglabāt atslēgas failu.
- C:\ProgramData\MySQL\mysql-keyring
Pēc tam atveriet šo failu teksta redaktorā.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Apakšējā vietā pievienojiet tālāk norādīto tekstu un saglabājiet to. Ja nevarat saglabāt ar administratora atļaujām, varat to saglabāt citā atrašanās vietā un pēc tam pārrakstīt failu.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Restartējiet MySQL pakalpojumu. To var restartēt ar komandu.
Pēc restartēšanas fails tiks automātiski izveidots norādītajā mapē.
Varat vēlreiz palaist komandu Pārbaudīt spraudni, lai pārbaudītu, vai spraudnis ir instalēts.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Šifrēšanas tabulas izveide
Tagad izveidosim šifrētu tabulu.
Izveidojiet tabulu, kas līdzīga tai, kas mums bija iepriekš, bet tagad pievienojiet opcijām ENCRYPTION='Y'
.
Šķiet, ka šis šifrēšanas iestatījums šobrīd nav konfigurējams GUI, tāpēc tas ir jāiestata ar komandu.
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;
Starp citu, pirms spraudņa iestatīšanas, pat ja mēģināt izveidot šifrēšanas tabulu, jūs saņemsiet šādu kļūdu.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Ja jums nav datu, jūs nezināt, vai tie ir šifrēti, tāpēc es centīšos ievietot līdzīgus datus.
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
Ir izveidots tabulas fails, tāpēc pārbaudīsim tā saturu.
Fails ir šifrēts, un ieraksta saturu nevar pārbaudīt.
Pagaidām man vairs nav jāuztraucas par to, ka varu lasīt ierakstus iekšā, vienkārši piesakoties serverī ar trešo pusi un tieši nozagt tabulas failu. Es domāju, ka tas ir vienkāršs drošības iestatījums, jo nav nepieciešams mainīt ieviešanu vispār.
Tomēr, ja piesakāties datu bāzē, datus var redzēt normāli. Ja vēlaties paaugstināt drošības līmeni, jums ir jāpārvalda datu bāzes pieteikšanās konti un jāievieš atsevišķs šifrēšanas mehānisms.
Konvertēšana uz šifrētām tabulām pa ceļam
Ja vispirms izveidojat nešifrētu tabulu, vēlāk to var pārvērst par šifrētu tabulu. Tādā gadījumā to var konvertēt ar šādu SQL:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
piemērs
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Tomēr esiet uzmanīgi, lai nepārrakstītu visus tabulas failus, jo tas prasīs ilgu laiku, ja ir pārāk daudz ierakstu.