Transzparens titkosítás (TDE) MySQL-táblákhoz (Windows)
Művelet-megerősítő környezet
- MySQL
-
- MySQL 8.0 közösségi kiadás
- Windows
-
- Windows 11
Szükséges környezet
- MySQL
-
- MySQL 8.0 közösségi kiadás
- MySQL 8.0 Enterprise kiadás
- Windows
-
- Windows 11
- Windows 10
- Windows Server
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
előfeltétel
- A MySQL adatbázist telepíteni kell
Az átlátszó titkosításról
A transzparens adattitkosítás (Enterprise Transparent Data Encryption) egy olyan technológia, amely a neve szerint titkosít, és biztonságosabb, mint ennek hiánya. Általában a titkosítás végrehajtása gyakran terhet jelent a megvalósító számára, mert titkosítási és visszafejtési feldolgozást kell végrehajtani. Ennek az "átlátszónak" az a jelentése, hogy titkosítható anélkül, hogy a megvalósító bármilyen változtatást eszközölne a feldolgozáson. Ezért ez egy nagyon hatékony biztonsági intézkedés, mert önmagában titkosítva van, miután az elején csak egy kis módosítást végeztek a beállításokon.
Azonban, ahogy a "nincs szükség változtatásokra" kifejezés is sugallja, ha valóban bejelentkezik az adatbázisba, akkor normálisan láthatja az adatokat, ha pedig a programból kapja meg az adatbázisrekordokat, akkor az adatokat normálisan láthatja. Ha a kapott adatok titkosítva vannak, akkor módosítani kell a feldolgozást, így nem egyezik meg a "feldolgozás nem szükséges módosítása" állítással.
Tehát mi is pontosan az átlátszó titkosítás a MySQL-ben, és a "tárolt adatbázisfájlok" vagy a "táblafájlok" titkosítva vannak. Ahogy később ellenőrizni fogom, még akkor is, ha közvetlenül megnyitja a fájlt, az csak titkosítva van, hogy a tartalma ne legyen látható, ezért úgy kell működtetni, hogy tényleges működés közben ne jelentkezzen be az adatbázisba.
Hozzon létre egy táblázatot a szokásos módon, és ellenőrizze a tartalmát
Először hozzunk létre egy táblát és egy rekordot a szokásos módon. Tetszés szerint létrehozhatod, de ezúttal az SQL-t futtatom a Workbench-ben a létrehozásához. Ezúttal transzparens titkosítást tervezünk beállítani a táblához, így a szokásos módon hozunk létre egy adatbázist.
CREATE DATABASE `test_database`
Általában asztalt is készítek. Bármi legyen is az oszlop tartalma, az lehet.
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;
Vezessen nyilvántartást a titkosítás ellenőrzéséhez.
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');
Adatbázis vagy tábla létrehozásakor az alapértelmezés szerint a következő mappákban jön létre:
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
A mappa rejtett mappa, ezért győződjön meg arról, hogy látható a File Explorer beállításaiban.
A mappában található egy mappa a létrehozott adatbázis nevével, ezért nyissa meg.
Belül táblázatszintű fájlok találhatók.
Nyissa meg ezt a fájlt egy szövegszerkesztőben, például a Jegyzettömbben. Mivel ez egy bináris fájl, azt hiszem, alapvetően van olyan szöveg, amit nem értek jól. Ha alul néz, megjelenik a regisztrált rekord szövege.
Ha nincs ilyen módon titkosítva, akkor a rekord tartalmát a fájl közvetlen megnyitásával ismerheti meg. Nem kell bejelentkeznie az adatbázisba, hogy megtudja, mi van benne.
Transzparens titkosítás beállítása
A transzparens titkosítás engedélyezéséhez telepítenie kell egy bővítményt. Először ellenőrizze a parancsot, hogy a bővítmény benne van-e.
Válassza a MySQL 8.0 parancssori kliens lehetőséget a Start menüből az elindításához.
Miután megadta jelszavát és bejelentkezett, írja be a következő parancsot:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Még nem telepítettem, ezért üresnek kell lennie.
Most konfiguráljuk a bővítményt. Először hozza létre a következő mappákat: Valójában a létrehozott hely vagy név rendben van. Adja meg a kulcsfájl későbbi mentési helyeként.
- C:\ProgramData\MySQL\mysql-kulcstartó
Ezután nyissa meg a következő fájlt egy szövegszerkesztőben.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Adja hozzá a következő szöveget az alsó helyre, és mentse el. Ha nem tud rendszergazdai jogosultságokkal menteni, mentheti egy másik helyre, majd felülírhatja a fájlt.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Indítsa újra a MySQL szolgáltatást. Egy paranccsal újraindíthatja.
Az újraindítás után a fájl automatikusan létrejön a megadott mappában.
A Beépülő modul ellenőrzése parancs ismételt futtatásával ellenőrizheti, hogy a bővítmény telepítve van-e.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Titkosítási tábla létrehozása
Most hozzunk létre egy titkosított táblát.
Hozzon létre egy táblázatot, amely hasonló a korábbihoz, de most adja hozzá a lehetőségekhez ENCRYPTION='Y'
.
Úgy tűnik, hogy ez a titkosítási beállítás jelenleg nem konfigurálható a grafikus felhasználói felületen, ezért paranccsal kell beállítani.
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;
Egyébként, a bővítmény beállítása előtt, még akkor is, ha megpróbál létrehozni egy titkosítási táblázatot, a következő hibaüzenetet kapja.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Ha nincsenek adataid, nem tudod, hogy titkosítva vannak-e, ezért megpróbálok hasonló adatokat elhelyezni.
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
Létrejött egy táblázatfájl, ezért ellenőrizzük a tartalmát.
A fájl titkosítva van, és a rekord tartalma nem ellenőrizhető.
Egyelőre már nem kell aggódnom amiatt, hogy el tudom olvasni a benne lévő rekordokat, ha bejelentkezem a szerverre egy harmadik féllel, és közvetlenül ellopom a táblázatfájlt. Szerintem ez egy egyszerű biztonsági beállítás, mert egyáltalán nem kell megváltoztatni az implementációt.
Ha azonban bejelentkezik az adatbázisba, akkor az adatokat a szokásos módon láthatja. Ha növelni szeretné a biztonság szintjét, akkor kezelnie kell az adatbázis bejelentkezési fiókjait, és külön titkosítási mechanizmust kell bevezetnie.
Konvertálás titkosított táblákká az út során
Ha először titkosítatlan táblát hoz létre, később titkosított táblává alakíthatja. Ebben az esetben a következő SQL-lel konvertálhatja:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
példa
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Ügyeljen azonban arra, hogy ne írja át az összes táblázatfájlt, mert sok rekord esetén sokáig tart.