Vynútiť transparentné šifrovanie (TDE) v tabuľkách MySQL (verzia systému Windows)
Prevádzkové prostredie
- MySQL
-
- MySQL 8.0 komunitné vydanie
- Windows
-
- Windows 11
Predpoklady
- MySQL
-
- MySQL 8.0 komunitné vydanie
- MySQL 8.0 Enterprise Edition
- Windows
-
- Windows 11
- Windows 10
- Windows Server
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
Predpokladom
- Je nainštalovaná databáza pre MySQL.
O transparentnom šifrovaní
Podnikové transparentné šifrovanie údajov, ako už názov napovedá, je šifrovacia technológia, ktorá je bezpečnejšia ako čokoľvek, čo ju nerobí. Bežne je to pri šifrovaní často záťaž pre implementátora, pretože je potrebné vykonať šifrovanie a dešifrovacie spracovanie. Význam tohto názvu "transparentný" je, že môže byť šifrovaný bez toho, aby implementátor vykonal akékoľvek zmeny v procese. Preto, ak na začiatku urobíte niekoľko zmien v nastaveniach, zvyšok bude šifrovaný bez povolenia, takže ide o veľmi efektívne bezpečnostné opatrenie.
Ako však naznačuje fráza "nie je potrebné nič meniť", ak sa skutočne prihlásite do databázy, môžete údaje vidieť normálne a ak získate záznam databázy z programu, môžete údaje vidieť normálne. Ak sú získané údaje šifrované, bude potrebné zmeniť proces, takže sa nebude zhodovať so znením "Nie je potrebné meniť proces".
Potom je v MySQL šifrované, čo presne je transparentné šifrovanie, "uložené databázové súbory" alebo "tabuľkové súbory" podliehajú šifrovaniu. Ako skontrolujeme neskôr, aj keď súbor otvoríte priamo, zašifruje ho iba tak, aby ste nevideli obsah, takže je potrebné ho prevádzkovať tak, aby nebol prihlásený do databázy v skutočnej prevádzke.
Normálne vytvorte tabuľku a skontrolujte jej obsah
Najprv vytvorme tabuľku a záznamy normálne. Môžete ho vytvoriť, ako chcete, ale v tomto prípade ho vytvoríme spustením SQL v Workbench. V tomto prípade plánujeme nastaviť transparentné šifrovanie tabuľky, takže databázu vytvoríme normálne.
CREATE DATABASE `test_database`
Stôl je tiež vyrobený normálne. Obsah stĺpca môže byť čokoľvek.
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;
Vložím tiež náhodný záznam na kontrolu šifrovania.
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');
Keď vytvoríte databázu alebo tabuľku, predvolene sa vytvorí v nasledujúcom priečinku.
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
Priečinok je skrytý, preto ho zobrazte v nastaveniach Prieskumníka.
V priečinku sa nachádza priečinok s názvom databázy, ktorú ste vytvorili, preto ho otvorte.
Vo vnútri je súbor tabuľky po tabuľke.
Otvorte tento súbor v textovom editore, ako je napríklad Poznámkový blok. Keďže ide o binárny súbor, myslím si, že v podstate existuje riadok textu, ktorému dobre nerozumiem. Ak sa pozriete dole, uvidíte text registrovaného záznamu.
Ak nie je šifrovaný týmto spôsobom, obsah záznamu bude známy, aj keď sa súbor otvorí priamo. Nemusíte sa prihlasovať do databázy, aby ste vedeli, čo je vo vnútri.
Konfigurácia nastavení transparentného šifrovania
Ak chcete povoliť transparentné šifrovanie, musíte nainštalovať doplnok. Najprv skontrolujte, či je doplnok súčasťou príkazu.
Spustite ho výberom položky "MySQL 8.0 Command Line Client" z ponuky Štart.
Po zadaní hesla a prihlásení zadajte nasledujúci príkaz:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Keďže ste ho ešte nenainštalovali, mal by byť prázdny.
Teraz poďme nastaviť doplnok. Najprv vytvorte nasledujúce priečinky: V skutočnosti nezáleží na tom, kde ho vytvoríte alebo aký je názov. Zadajte ho ako umiestnenie, kam chcete súbor kľúča neskôr uložiť.
- C:\ProgramData\MySQL\mysql-keyring
Potom otvorte nasledujúci súbor v textovom editore:
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Pridajte nasledujúci text na prázdne miesto v dolnej časti a uložte ho. Ak nemôžete uložiť s oprávneniami správcu, môžete súbor uložiť do iného umiestnenia a potom súbor prepísať.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Reštartujte službu MySQL. Môžete ho tiež reštartovať pomocou príkazu.
Po reštartovaní sa súbor automaticky vytvorí v určenom priečinku.
Inštaláciu doplnku môžete overiť opätovným spustením príkazu Check In.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Vytvorenie šifrovanej tabuľky
Teraz vytvorme šifrovanú tabuľku.
Vytvorte tabuľku podobnú predchádzajúcej, ale tentoraz pridajte k ENCRYPTION='Y'
možnostiam.
Toto nastavenie šifrovania sa momentálne nezdá byť možné v grafickom používateľskom rozhraní, takže musí byť nastavené príkazom.
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;
Mimochodom, pred konfiguráciou doplnku, aj keď sa pokúsite vytvoriť šifrovanú tabuľku, zobrazí sa nasledujúca chyba.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Ak nemáte žiadne údaje, neviete, či sú šifrované, takže sa pokúsim vložiť rovnaké údaje.
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
Keďže súbor tabuľky bol vytvorený, skontrolujme obsah.
Súbor bol zašifrovaný a obsah záznamu nie je možné overiť.
Zatiaľ sa už nemusíte obávať, že tretia strana číta záznamy vo vnútri jednoduchým prihlásením sa na server a priamym krádežou súboru tabuľky. Vykonávanie nie je vôbec potrebné meniť, takže si myslím, že ide o jednoduché bezpečnostné nastavenie.
Ak sa však prihlásite do databázy, môžete údaje vidieť normálne. Ak chcete zvýšiť úroveň zabezpečenia, musíte dobre spravovať prihlasovací účet databázy a zaviesť samostatný šifrovací mechanizmus.
Konverzia na šifrovanú tabuľku počas celého procesu
Ak pôvodne vytvoríte nezašifrovanú tabuľku, môžete ju neskôr skonvertovať na šifrovanú tabuľku. V takom prípade ho môžete previesť pomocou nasledujúceho SQL:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
príklad
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Upozorňujeme však, že ak existuje veľa záznamov, bude to chvíľu trvať, pretože všetky súbory tabuľky sú prepísané.