Caurspīdīgas šifrēšanas (TDE) ieviešana MySQL tabulās (Windows versija)

Lapa atjaunota :
Lapas izveides datums :

Darbības vide

MySQL
  • MySQL 8.0 kopienas izdevums
Windows
  • Operētājsistēmā Windows 11

Priekšnoteikumi

MySQL
  • MySQL 8.0 kopienas izdevums
  • MySQL 8.0 Enterprise Edition
Windows
  • Operētājsistēmā Windows 11
  • Operētājsistēmā Windows 10
Windows Server
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

Priekšnosacījumu

  • Ir instalēta MySQL datu bāze.

Par caurspīdīgu šifrēšanu

Uzņēmuma caurspīdīgo datu šifrēšana, kā norāda nosaukums, ir šifrēšanas tehnoloģija, kas ir drošāka par visu, kas to nedara. Parasti, šifrējot, tas bieži ir slogs īstenotājam, jo ir nepieciešams veikt šifrēšanu un atšifrēšanas apstrādi. Šī nosaukuma "caurspīdīgs" nozīme ir tāda, ka to var šifrēt, neveicot nekādas izmaiņas procesā. Tāpēc, ja sākumā veicat dažas izmaiņas iestatījumos, pārējie tiks šifrēti bez atļaujas, tāpēc tas ir ļoti efektīvs drošības pasākums.

Tomēr, kā liecina frāze "nekas nav jāmaina", 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 ierakstu no programmas, jūs varat redzēt datus normāli. Ja iegūtie dati ir šifrēti, būs jāmaina process, tāpēc tas neatbilst formulējumam "Nav nepieciešams mainīt procesu".

Pēc tam MySQL tiek šifrēts, kas tieši ir caurspīdīga šifrēšana, "saglabātie datu bāzes faili" vai "tabulas faili" tiek šifrēti. Kā mēs pārbaudīsim vēlāk, pat ja jūs atverat failu tieši, tas šifrē to tikai tā, lai jūs nevarētu redzēt saturu, tāpēc ir nepieciešams to darbināt tā, lai tas nebūtu pieteicies datu bāzē faktiskajā darbībā.

Izveidojiet tabulu normāli un pārbaudiet saturu

Vispirms izveidosim tabulu un ierakstus kā parasti. Varat to izveidot, kā vien vēlaties, taču šajā gadījumā mēs to izveidosim, izpildot SQL programmā Workbench. Šajā gadījumā mēs plānojam iestatīt caurspīdīgu tabulas šifrēšanu, tāpēc mēs izveidosim datu bāzi normāli.

CREATE DATABASE `test_database`

Tabula tiek veidota arī normāli. Kolonnas saturs var būt jebkas.

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;

Es arī ievietošu nejaušu 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 šajā mapē.

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

ProgramData Mape ir paslēpta, tāpēc padariet to redzamu Explorer iestatījumos.

Ir mape ar mapē izveidotās datu bāzes nosaukumu, tāpēc atveriet to.

Iekšpusē ir fails pa tabulai.

Atveriet šo failu teksta redaktorā, piemēram, Notepad. Tā kā tas ir binārs fails, es domāju, ka būtībā ir teksta rinda, kuru es labi nesaprotu. Ja paskatās apakšā, jūs redzēsiet reģistrētā ieraksta tekstu.

Ja tas nav šifrēts šādā veidā, ieraksta saturs būs zināms pat tad, ja fails tiek atvērts tieši. Jums nav jāpiesakās datu bāzē, lai uzzinātu, kas atrodas iekšpusē.

Caurspīdīgu šifrēšanas iestatījumu konfigurēšana

Lai iespējotu caurspīdīgu šifrēšanu, jums jāinstalē spraudnis. Vispirms pārbaudiet, vai spraudnis ir iekļauts komandā.

Sāciet to, izvēlnē Sākt atlasot "MySQL 8.0 komandrindas klients".

Pēc paroles ievadīšanas un pieteikšanās ievadiet šādu komandu:

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

Tā kā jūs to vēl neesat instalējis, tam vajadzētu būt tukšam.

Tagad iestatīsim spraudni. Vispirms izveidojiet šādas mapes: Patiesībā nav svarīgi, kur jūs to izveidojat vai kāds nosaukums tas ir. Norādiet to kā vietu, kur vēlāk vēlaties saglabāt atslēgas failu.

  • C:\ProgramData\MySQL\mysql-keyring

Pēc tam teksta redaktorā atveriet šādu failu:

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

Pievienojiet šādu tekstu tukšajai vietai apakšā un saglabājiet to. Ja nevarat saglabāt ar administratora tiesībā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. Varat arī restartēt to ar komandu.

Restartējot, fails tiek automātiski izveidots norādītajā mapē.

Varat pārbaudīt, vai spraudnis ir instalēts, vēlreiz palaižot komandu pārbaudīt spraudni.

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

Šifrētas tabulas izveide

Tagad izveidosim šifrētu tabulu. Izveidojiet tabulu, kas ir līdzīga iepriekšējai, bet šoreiz pievienojiet ENCRYPTION='Y' opcijām. Šķiet, ka šis šifrēšanas iestatījums GUI šobrīd nav iespējams, 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 konfigurēšanas, pat ja mēģināt izveidot šifrētu tabulu, tiks parādīta šāda kļūda.

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 mēģināšu ievietot tos pašus 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 Tā kā tabulas fails ir izveidots, pārbaudīsim saturu.

Fails ir šifrēts, un ieraksta saturu nevar pārbaudīt.

Pagaidām jums vairs nav jāuztraucas par to, ka trešā puse lasa ierakstus iekšā, vienkārši piesakoties serverī un tieši nozogot tabulas failu. Nav nekādas vajadzības mainīt īstenošanu, tāpēc es domāju, ka tas ir vienkāršs drošības iestatījums.

Tomēr, ja piesakāties datu bāzē, datus varat redzēt kā parasti. Ja vēlaties palielināt drošības līmeni, jums labi jāpārvalda datu bāzes pieteikšanās konts un jāievieš atsevišķs šifrēšanas mehānisms.

Pārvēršana par šifrētu tabulu pa ceļam

Ja sākotnēji izveidojat nešifrētu tabulu, vēlāk to varat 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, lūdzu, ņemiet vērā, ka būs nepieciešams laiks, ja būs daudz ierakstu, jo visi tabulas faili tiek pārrakstīti.