Ota läpinäkyvä salaus (TDE) käyttöön MySQL-taulukoissa (Windows-versio)

Sivu päivitetty :
Sivun luontipäivämäärä :

Toimintaympäristö

MySQL
  • MySQL 8.0 -yhteisön versio
Windows
  • Windows 11

Edellytykset

MySQL
  • MySQL 8.0 -yhteisön versio
  • MySQL 8.0 Enterprise -versio
Windows
  • Windows 11
  • Windows 10
Windows Server
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

edellytys

  • MySQL-tietokanta on asennettu.

Tietoja läpinäkyvästä salauksesta

Enterprise Transparent Data Encryption, kuten nimestä voi päätellä, on salaustekniikka, joka on turvallisempi kuin mikään, mikä ei ole. Normaalisti salauksessa se on usein taakka toteuttajalle, koska salaus ja salauksen purkukäsittely on välttämätöntä. Tämän nimen "läpinäkyvä" merkitys on, että se voidaan salata ilman, että toteuttaja tekee muutoksia prosessiin. Siksi, jos teet muutamia muutoksia asetuksiin alussa, loput salataan ilman lupaa, joten se on erittäin tehokas turvatoimenpide.

Kuitenkin, kuten lause "ei tarvitse muuttaa mitään" viittaa, jos kirjaudut tietokantaan, näet tiedot normaalisti, ja jos saat tietokantatietueen ohjelmasta, näet tiedot normaalisti. Jos hankitut tiedot salataan, prosessia on muutettava, joten se ei vastaa sanamuotoa "Prosessia ei tarvitse muuttaa".

Sitten MySQL: ssä salataan, mikä tarkalleen on läpinäkyvä salaus, "tallennetut tietokantatiedostot" tai "taulukkotiedostot" salataan. Kuten tarkistamme myöhemmin, vaikka avaat tiedoston suoraan, se salaa sen vain niin, että et näe sisältöä, joten sitä on käytettävä niin, että se ei ole kirjautunut tietokantaan todellisessa toiminnassa.

Luo taulukko normaalisti ja tarkista sisältö

Luodaan ensin taulukko ja tietueet normaalisti. Voit luoda sen haluamallasi tavalla, mutta tässä tapauksessa luomme sen suorittamalla SQL:n Workbenchissä. Tässä tapauksessa aiomme asettaa taulukolle läpinäkyvän salauksen, joten luomme tietokannan normaalisti.

CREATE DATABASE `test_database`

Pöytä tehdään myös normaalisti. Sarakkeen sisältö voi olla mikä tahansa.

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;

Laitan myös satunnaisen tietueen salauksen tarkistamiseksi.

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

Kun luot tietokannan tai taulukon, se luodaan oletusarvoisesti seuraavaan kansioon.

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

ProgramData Kansio on piilotettu, joten tee se näkyväksi Explorerin asetuksissa.

Kansiossa on kansio, jossa on luomasi tietokannan nimi, joten avaa se.

Sisällä on taulukkokohtainen tiedosto.

Avaa tämä tiedosto tekstieditorissa, kuten Muistiossa. Koska se on binääritiedosto, luulen, että siinä on pohjimmiltaan tekstirivi, jota en ymmärrä hyvin. Jos katsot alaosaa, näet rekisteröidyn tietueen tekstin.

Jos sitä ei salata tällä tavalla, tietueen sisältö tiedetään, vaikka tiedosto avattaisiin suoraan. Sinun ei tarvitse kirjautua tietokantaan tietääksesi, mitä se sisältää.

Läpinäkyvien salausasetusten määrittäminen

Jos haluat ottaa läpinäkyvän salauksen käyttöön, sinun on asennettava laajennus. Tarkista ensin, sisältyykö laajennus komentoon.

Käynnistä se valitsemalla Käynnistä-valikosta "MySQL 8.0 Command Line Client".

Kun olet syöttänyt salasanasi ja kirjautunut sisään, kirjoita seuraava komento:

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

Koska et ole vielä asentanut sitä, sen pitäisi olla tyhjä.

Otetaan nyt käyttöön laajennus. Luo ensin seuraavat kansiot: Itse asiassa sillä ei ole väliä, missä luot sen tai mikä nimi se on. Määritä se sijainniksi, johon haluat tallentaa avaintiedoston myöhemmin.

  • C:\ProgramData\MySQL\mysql-avaimenperä

Avaa seuraavaksi seuraava tiedosto tekstieditorissa:

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

Lisää seuraava teksti alareunassa olevaan tyhjään tilaan ja tallenna se. Jos et voi tallentaa järjestelmänvalvojan oikeuksilla, voit tallentaa sen toiseen sijaintiin ja korvata tiedoston.

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

Käynnistä MySQL-palvelu uudelleen. Voit myös käynnistää sen uudelleen komennolla.

Kun käynnistät tiedoston uudelleen, tiedosto luodaan automaattisesti määritettyyn kansioon.

Voit varmistaa, että laajennus on asennettu, suorittamalla tarkistuslaajennuksen komennon uudelleen.

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

Salatun taulukon luominen

Luodaan nyt salattu taulukko. Luo taulukko, joka on samanlainen kuin edellinen, mutta lisää ENCRYPTION='Y' tällä kertaa vaihtoehtoja. Tämä salausasetus ei näytä olevan mahdollista graafisessa käyttöliittymässä tällä hetkellä, joten se on asetettava komennolla.

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;

Muuten, ennen kuin laajennus on määritetty, vaikka yrität luoda salatun taulukon, seuraava virhe tulee näkyviin.

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

Jos sinulla ei ole tietoja, et tiedä, onko se salattu, joten yritän laittaa samat tiedot.

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 Koska taulukkotiedosto on luotu, tarkistetaan sisältö.

Tiedosto on salattu, eikä tietueen sisältöä voida tarkistaa.

Toistaiseksi sinun ei enää tarvitse huolehtia siitä, että kolmas osapuoli lukee tietueet sisällä vain kirjautumalla palvelimelle ja varastamalla taulukkotiedoston suoraan. Toteutusta ei tarvitse muuttaa lainkaan, joten mielestäni se on helppo suojausasetus.

Jos kuitenkin kirjaudut tietokantaan, näet tiedot normaalisti. Jos haluat lisätä turvallisuustasoa, sinun on hallittava tietokannan kirjautumistiliä hyvin ja otettava käyttöön erillinen salausmekanismi.

Muunna salatuksi taulukoksi matkan varrella

Jos luot salaamattoman taulukon alun perin, voit muuntaa sen salatuksi taulukoksi myöhemmin. Siinä tapauksessa voit muuntaa sen seuraavalla SQL: llä:

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

esimerkki

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

Huomaa kuitenkin, että se vie aikaa, jos tietueita on paljon, koska kaikki taulukkotiedostot kirjoitetaan uudelleen.