Läbipaistva krüptimise (TDE) jõustamine MySQL-i tabelites (Windowsi versioon)

Lehekülg uuendatud :
Lehe loomise kuupäev :

Töökeskkond

MySQL
  • MySQL 8.0 kogukonna väljaanne
Windows
  • Windows 11

Eeltingimused

MySQL
  • MySQL 8.0 kogukonna väljaanne
  • MySQL 8.0 Enterprise'i väljaanne
Windows
  • Windows 11
  • Windows 10
Windows Server
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

eeltingimus

  • MySQL-i andmebaas on installitud.

Teave läbipaistva krüptimise kohta

Ettevõtte läbipaistev andmete krüptimine, nagu nimigi ütleb, on krüptimistehnoloogia, mis on turvalisem kui miski, mis seda ei tee. Tavaliselt on krüpteerimisel sageli rakendajale koormav, sest on vaja teostada krüpteerimist ja dekrüpteerimist. Selle nime "läbipaistev" tähendus on see, et seda saab krüpteerida ilma, et rakendaja protsessis muudatusi teeks. Seega, kui teete alguses seadetes mõned muudatused, krüpteeritakse ülejäänud ilma loata, seega on see väga tõhus turvameede.

Kuid nagu fraas "pole vaja midagi muuta" viitab sellele, et kui te tegelikult andmebaasi sisse logite, näete andmeid normaalselt ja kui saate andmebaasi kirje programmist, näete andmeid normaalselt. Kui saadud andmed on krüpteeritud, on vaja protsessi muuta, nii et see ei vasta sõnastusele "Protsessi pole vaja muuta".

Seejärel krüpteeritakse MySQL-is see, mis täpselt on läbipaistev krüpteerimine, "salvestatud andmebaasifailid" või "tabelifailid" on krüpteeritud. Nagu me hiljem kontrollime, isegi kui avate faili otse, krüpteerib see ainult selle, nii et te ei näe sisu, mistõttu on vaja seda kasutada nii, et see ei oleks tegelikult andmebaasi sisse logitud.

Looge tabel tavaliselt ja kontrollige selle sisu

Esiteks loome tabeli ja salvestame normaalselt. Saate selle luua nii, nagu soovite, kuid sel juhul loome selle, käivitades SQL-i Workbenchis. Sel juhul plaanime tabelile seada läbipaistva krüptimise, nii et loome andmebaasi tavaliselt.

CREATE DATABASE `test_database`

Tabel on tehtud ka normaalselt. Veeru sisu võib olla midagi.

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;

Panen krüptimise kontrollimiseks ka juhusliku kirje.

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ärgmises kaustas.

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

ProgramData Kaust on peidetud, nii et muutke see Exploreri sätetes nähtavaks.

Kaustas on kaust, millel on teie loodud andmebaasi nimi, nii et avage see.

Toas on tabelipõhine fail.

Avage see fail tekstiredaktoris (nt Notepadis). Kuna see on binaarne fail, arvan, et põhimõtteliselt on olemas tekstirida, millest ma hästi aru ei saa. Kui vaatate allosas, näete registreeritud kirje teksti.

Kui see pole sel viisil krüptitud, on kirje sisu teada isegi siis, kui fail avatakse otse. Te ei pea andmebaasi sisse logima, et teada saada, mis seal sees on.

Läbipaistvate krüptimissätete konfigureerimine

Läbipaistva krüptimise lubamiseks peate installima pistikprogrammi. Esmalt kontrollige, kas pistikprogramm on käsuga kaasas.

Käivitage see, valides menüüst Start menüü "MySQL 8.0 Command Line Client".

Pärast parooli sisestamist ja sisselogimist sisestage järgmine käsk:

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

Kuna te pole seda veel installinud, peaks see olema tühi.

Nüüd seadistame pistikprogrammi. Esmalt looge järgmised kaustad: Tegelikult pole vahet, kus te selle loote või mis nimi see on. Määrake see asukohaks, kuhu soovite võtmefaili hiljem salvestada.

  • C:\ProgramData\MySQL\mysql-keyring

Seejärel avage tekstiredaktoris järgmine fail:

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

Lisage allservas olevale tühjale alale järgmine tekst ja salvestage see. Kui te ei saa administraatori õigustega salvestada, saate selle teise asukohta salvestada 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. Samuti saate selle käsuga taaskäivitada.

Taaskäivitamisel luuakse fail automaatselt määratud kaustas.

Saate kontrollida, kas pistikprogramm on installitud, käivitades uuesti käsu kontrolli pistikprogrammi.

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

Krüptitud tabeli loomine

Nüüd loome krüpteeritud tabeli. Looge eelmisele tabelile sarnane tabel, kuid lisage seekord suvandid ENCRYPTION='Y' . See krüpteerimisseade ei tundu praegu GUI-s olevat võimalik, seega tuleb see seadistada käsuga.

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 konfigureerimist, isegi kui proovite luua krüpteeritud tabelit, kuvatakse järgmine viga.

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, ei tea te, kas need on krüptitud, nii et proovin panna samad andmed.

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 Kuna tabelifail on loodud, kontrollime sisu.

Fail on krüptitud ja kirje sisu ei saa kontrollida.

Praegu ei pea te enam muretsema selle pärast, et kolmas osapool loeb sees olevaid kirjeid lihtsalt serverisse sisse logides ja tabelifaili otse varastades. Rakendamist ei ole vaja üldse muuta, nii et ma arvan, et see on lihtne turvaseade.

Kui aga logite andmebaasi sisse, näete andmeid normaalselt. Kui soovite turvalisuse taset suurendada, peate andmebaasi sisselogimiskontot hästi haldama ja tutvustama eraldi krüpteerimismehhanismi.

Teel olles krüptitud tabeliks teisendamine

Kui loote algselt krüptimata tabeli, saate selle hiljem krüptitud tabeliks teisendada. Sellisel juhul saate selle teisendada järgmise SQL-iga:

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

näide

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

Pange tähele, et kui kirjeid on palju, võtab see aega, sest kõik tabelifailid kirjutatakse ümber.