Transzparens titkosítás (TDE) kényszerítése MySQL-táblákon (Windows verzió)

Oldal frissítve :
Oldal létrehozásának dátuma :

Működési környezet

MySQL
  • MySQL 8.0 közösségi kiadás
Windows
  • Windows 11 esetén

Előfeltételek

MySQL
  • MySQL 8.0 közösségi kiadás
  • MySQL 8.0 Enterprise kiadás
Windows
  • Windows 11 esetén
  • Windows 10 esetén
Windows Server
  • Windows Server 2022 esetén
  • Windows Server 2019 esetén
  • Windows Server 2016 esetén
  • Windows Server 2012 R2

előfeltétel

  • Telepítve van egy MySQL adatbázis.

Információk a transzparens titkosításról

Az Enterprise Transparent Data Encryption, ahogy a neve is mutatja, egy olyan titkosítási technológia, amely biztonságosabb, mint bármi, ami nem. Általában titkosításkor ez gyakran terhet jelent a végrehajtó számára, mert titkosítást és visszafejtési feldolgozást kell végezni. Ennek a névnek az "átlátszó" jelentése az, hogy titkosítható anélkül, hogy a végrehajtó bármilyen változtatást hajtana végre a folyamatban. Ezért, ha az elején néhány változtatást hajt végre a beállításokban, a többit engedély nélkül titkosítják, így ez egy nagyon hatékony biztonsági intézkedés.

Mivel azonban a "nem kell semmit megváltoztatni" kifejezés azt sugallja, ha ténylegesen bejelentkezik az adatbázisba, akkor normálisan láthatja az adatokat, és ha megkapja az adatbázisrekordot a programból, akkor normálisan láthatja az adatokat. Ha a megszerzett adatok titkosítva vannak, meg kell változtatni a folyamatot, így nem felel meg a "Nincs szükség a folyamat megváltoztatására" megfogalmazásnak.

Ezután a MySQL-ben titkosítják, hogy pontosan mi az átlátszó titkosítás, a "tárolt adatbázisfájlok" vagy a "táblafájlok" titkosítás alá esnek. Mint később ellenőrizni fogjuk, még akkor is, ha közvetlenül megnyitja a fájlt, csak titkosítja, hogy ne láthassa a tartalmát, ezért úgy kell működtetni, hogy tényleges működés közben ne legyen bejelentkezve 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 rekordokat a szokásos módon. Tetszés szerint létrehozhatja, de ebben az esetben az SQL Workbenchben való végrehajtásával hozzuk létre. Ebben az esetben transzparens titkosítást tervezünk beállítani a táblához, így a szokásos módon hozzuk létre az adatbázist.

CREATE DATABASE `test_database`

A táblázat is normálisan készül. Az oszlop tartalma bármi 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;

Véletlenszerű rekordot is beteszek 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');

Amikor létrehoz egy adatbázist vagy táblát, az alapértelmezés szerint a következő mappában jön létre.

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

ProgramData A mappa rejtett, ezért tegye láthatóvá az Explorer beállításaiban.

Van egy mappa a mappában létrehozott adatbázis nevével, ezért nyissa meg.

Belül van egy táblázatonkénti fájl.

Nyissa meg ezt a fájlt egy szövegszerkesztőben, például a Jegyzettömbben. Mivel bináris fájlról van szó, úgy gondolom, hogy alapvetően van egy szövegsor, amelyet nem értek jól. Ha megnézi az alját, látni fogja a regisztrált rekord szövegét.

Ha nincs ilyen módon titkosítva, a rekord tartalma akkor is ismert lesz, ha a fájlt közvetlenül megnyitják. Nem kell bejelentkeznie az adatbázisba, hogy megtudja, mi van benne.

Transzparens titkosítási beállítások konfigurálása

Az átlátszó titkosítás engedélyezéséhez telepítenie kell egy beépülő modult. Először ellenőrizze, hogy a plug-in szerepel-e a parancsban.

Indítsa el a Start menü "MySQL 8.0 parancssori kliens" kiválasztásával.

A jelszó megadása és a bejelentkezés után írja be a következő parancsot:

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

Mivel még nem telepítette, üresnek kell lennie.

Most állítsuk be a beépülő modult. Először hozza létre a következő mappákat: Valójában nem számít, hol hozza létre, vagy milyen néven van. Adja meg azt a helyet, ahová később menteni szeretné a kulcsfájlt.

  • C:\ProgramData\MySQL\mysql-kulcscsomó

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ó üres területhez, és mentse el. Ha nem tudja 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. A paranccsal is újraindíthatja.

Újraindításkor a fájl automatikusan létrejön a megadott mappában.

A beépülő modul telepítésének ellenőrzéséhez futtassa újra a check plug-in parancsot.

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

Titkosított tábla létrehozása

Most hozzunk létre egy titkosított táblát. Hozzon létre egy, az előzőhöz hasonló táblázatot, de ezúttal adja hozzá a ENCRYPTION='Y' lehetőségeket. Úgy tűnik, hogy ez a titkosítási beállítás jelenleg nem lehetséges 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, mielőtt a plug-in konfigurálva lenne, még akkor is, ha titkosított táblát próbál létrehozni, a következő hiba jelenik meg.

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

Ha nincs adata, akkor nem tudja, hogy titkosítva van-e, ezért megpróbálom ugyanazokat az 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 A táblafájl létrehozása óta 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 attól tartania, hogy egy harmadik fél elolvassa a benne lévő rekordokat, csak bejelentkezik a szerverre, és közvetlenül ellopja a táblafájlt. Egyáltalán nincs szükség a megvalósítás megváltoztatására, ezért úgy gondolom, hogy ez egy egyszerű biztonsági beállítás.

Ha azonban bejelentkezik az adatbázisba, normálisan láthatja az adatokat. Ha növelni szeretné a biztonság szintjét, jól kell kezelnie az adatbázis bejelentkezési fiókját, és külön titkosítási mechanizmust kell bevezetnie.

Konvertálás titkosított táblává az út során

Ha kezdetben 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';

Kérjük, vegye figyelembe, hogy sok rekord esetén időbe telik, mert az összes táblafájl újraíródik.