Прилагане на прозрачно шифроване (TDE) в MySQL таблици (версия за Windows)

Страницата се актуализира :
Дата на създаване на страница :

Работна среда

МиШЛЛ
  • MySQL 8.0 Издание на общността
Уиндоус
  • Прозорци 11

Предпоставки

МиШЛЛ
  • MySQL 8.0 Издание на общността
  • MySQL 8.0 Enterprise Edition
Уиндоус
  • Прозорци 11
  • Прозорци 10
Сървър на Windows
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

Предпоставка

  • Инсталирана е база данни за MySQL.

За прозрачното шифроване

Корпоративното прозрачно криптиране на данни, както подсказва името, е технология за криптиране, която е по-сигурна от всичко, което не го прави. Обикновено, когато криптирате, това често е тежест за изпълнителя, защото е необходимо да се извърши обработка на криптиране и декриптиране. Значението на това име "прозрачен" е, че той може да бъде криптиран, без изпълнителят да прави промени в процеса. Ето защо, ако направите няколко промени в настройките в началото, останалите ще бъдат криптирани без разрешение, така че това е много ефективна мярка за сигурност.

Въпреки това, както подсказва фразата "няма нужда да променяте нищо", ако действително влезете в базата данни, можете да видите данните нормално, а ако получите записа на базата данни от програмата, можете да видите данните нормално. Ако придобитите данни са криптирани, ще е необходимо да промените процеса, така че няма да съответства на формулировката "Няма нужда да променяте процеса".

След това, в MySQL, какво точно е прозрачно криптиране е криптирано, "съхранените файлове на базата данни" или "табличните файлове" подлежат на криптиране. Както ще проверим по-късно, дори и да отворите файла директно, той само го криптира, така че да не можете да видите съдържанието, така че е необходимо да го оперирате, така че да не е влязъл в базата данни в действителна работа.

Създаване на таблица нормално и проверка на съдържанието

Първо, нека създадем таблица и записи нормално. Можете да го създадете както искате, но в този случай ще го създадем, като изпълним SQL в Workbench. В този случай планираме да зададем прозрачно криптиране за таблицата, така че ще създадем базата данни нормално.

CREATE DATABASE `test_database`

Масата също се прави нормално. Съдържанието на колоната може да бъде всичко.

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;

Също така ще сложа случаен запис, за да проверя криптирането.

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');

Когато създавате база данни или таблица, тя се създава в следната папка по подразбиране.

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

ProgramData Папката е скрита, така че я направете видима в настройките на Explorer.

Има папка с името на базата данни, която сте създали в папката, така че я отворете.

Вътре има файл таблица по таблица.

Отворете този файл в текстов редактор, като например Notepad. Тъй като това е двоичен файл, мисля, че има основно ред текст, който не разбирам добре. Ако погледнете в долната част, ще видите текста на регистрирания запис.

Ако не е шифровано по този начин, съдържанието на записа ще бъде известно дори ако файлът е отворен директно. Не е нужно да влизате в базата данни, за да знаете какво има вътре.

Конфигуриране на прозрачни настройки за шифроване

За да разрешите прозрачно шифроване, трябва да инсталирате добавка. Първо проверете дали добавката е включена в командата.

Стартирайте го, като изберете "MySQL 8.0 Client Command Line" от менюто "Старт".

След като въведете паролата си и влезете, въведете следната команда:

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

Тъй като все още не сте го инсталирали, той трябва да е празен.

Сега, нека да настроим добавката. Първо създайте следните папки: Всъщност няма значение къде го създавате или какво е името. Задайте го като местоположение, където искате да запишете ключовия файл по-късно.

  • C:\ProgramData\MySQL\mysql-ключодържател

След това отворете следния файл в текстов редактор:

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

Добавете следния текст към празното пространство в долната част и го запишете. Ако не можете да запишете с привилегии на администратор, можете да го запишете на друго място и след това да презапишете файла.

early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring

Рестартирайте услугата MySQL. Можете също да го рестартирате с командата.

Когато рестартирате, файлът се създава автоматично в указаната папка.

Можете да проверите дали добавката е инсталирана, като изпълните отново командата check add-in.

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

Създаване на шифрована таблица

Сега нека създадем шифрована таблица. Създайте таблица, подобна на предишната, но този път добавете към опциите ENCRYPTION='Y' . Тази настройка за шифроване изглежда възможна в графичния интерфейс в момента, така че трябва да бъде зададена с команда.

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;

Между другото, преди да се конфигурира приставката, дори ако се опитате да създадете криптирана таблица, ще се покаже следната грешка.

Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.
キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。

Ако нямате никакви данни, не знаете дали са криптирани, затова ще се опитам да сложа същите данни.

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 Тъй като файлът на таблицата е създаден, нека проверим съдържанието.

Файлът е шифрован и съдържанието на записа не може да бъде проверено.

За момента вече не е нужно да се притеснявате, че трета страна чете записите вътре само като влезе в сървъра и открадне файла на таблицата директно. Няма нужда да се променя изпълнението изобщо, така че мисля, че това е лесна настройка за сигурност.

Ако обаче влезете в базата данни, можете да видите данните нормално. Ако искате да повишите нивото на сигурност, трябва да управлявате добре акаунта за вход в базата данни и да въведете отделен механизъм за криптиране.

Конвертиране в шифрована таблица по пътя

Ако първоначално създадете нешифрована таблица, можете да я конвертирате в шифрована таблица по-късно. В този случай можете да го конвертирате със следния SQL:

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

пример

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

Имайте предвид обаче, че ще отнеме време, ако има много записи, защото всички таблични файлове са пренаписани.