Läpinäkyvä salaus (TDE) MySQL-taulukoille (Windows)
Toiminnan vahvistusympäristö
- MySQL
-
- MySQL 8.0 Community Edition
- Windows
-
- Windows 11
Vaadittu ympäristö
- MySQL
-
- MySQL 8.0 Community Edition
- MySQL 8.0 Enterprise Edition
- Windows
-
- Windows 11
- Windows 10
- Windows-palvelin
-
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
edellytys
- MySQL-tietokanta on asennettava
Tietoja läpinäkyvästä salauksesta
Läpinäkyvä tietojen salaus (Enterprise Transparent Data Encryption) on tekniikka, joka salaa, kuten nimestä voi päätellä, ja se on turvallisempaa kuin olla tekemättä tätä. Normaalisti, kun salaus suoritetaan, se on usein taakka toteuttajalle, koska salaus ja salauksen purkukäsittely on suoritettava. Tämän "läpinäkyvän" merkitys on, että se voidaan salata ilman, että toteuttaja tekee mitään muutoksia käsittelyyn. Siksi se on erittäin tehokas turvatoimenpide, koska se salataan itsestään vain pienen asetusten säätämisen jälkeen alussa.
Kuitenkin, kuten lause "ei tarvitse tehdä muutoksia" viittaa, jos todella kirjaudut tietokantaan, näet tiedot normaalisti, ja jos saat tietokantatietueet ohjelmasta, näet tiedot normaalisti. Jos saadut tiedot on salattu, käsittelyyn on tehtävä muutoksia, joten ne eivät vastaa lausetta "käsittelyyn ei tarvita muutoksia".
Joten mitä läpinäkyvä salaus MySQL:ssä tarkalleen ottaen on, ja "tallennetut tietokantatiedostot" tai "taulukkotiedostot" salataan. Kuten tarkistan myöhemmin, vaikka avaisit tiedoston suoraan, se on salattu vain niin, että sisältöä ei näy, joten sitä on käytettävä niin, että se ei kirjaudu tietokantaan todellisessa toiminnassa.
Luo taulukko normaalisti ja tarkista sisältö
Luodaan ensin taulukko ja tietue normaalisti. Voit luoda sen haluamallasi tavalla, mutta tällä kertaa suoritan SQL:n Workbenchissä luodakseni sen. Tällä kertaa aiomme määrittää taulukolle läpinäkyvän salauksen, joten luomme tietokannan normaalisti.
CREATE DATABASE `test_database`
Teen myös pöydän normaalisti. Olipa sarakkeen sisältö mikä tahansa, se voi olla.
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;
Pidä kirjaa 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 seuraaviin kansioihin:
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
Kansio on piilotettu kansio, joten varmista, että se näkyy File Explorerin asetuksissa.
Kansion sisällä on kansio, jossa on luomasi tietokannan nimi, joten avaa se.
Sisällä on taulukkotason tiedostoja.
Avaa tämä tiedosto tekstieditorissa, kuten Muistiossa. Koska se on binääritiedosto, luulen, että siinä on periaatteessa tekstiä, jota en ymmärrä hyvin. Jos katsot alareunaa, näet rekisteröidyn tietueen tekstin.
Jos sitä ei ole salattu tällä tavalla, voit tietää tietueen sisällön vain avaamalla tiedoston suoraan. Sinun ei tarvitse kirjautua sisään tietokantaan tietääksesi, mitä sen sisältö sisältää.
Läpinäkyvän salauksen määrittäminen
Jos haluat ottaa läpinäkyvän salauksen käyttöön, sinun on asennettava laajennus. Tarkista ensin komennosta, onko laajennus mukana.
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%';
En ole vielä asentanut sitä, joten sen pitäisi olla tyhjä.
Määritetään nyt laajennus. Luo ensin seuraavat kansiot: Itse asiassa luomasi paikka tai nimi on hyvä. Määritä se sijainniksi, johon avaintiedosto tallennetaan myöhemmin.
- C:\ProgramData\MySQL\mysql-avainnippu
Avaa sitten seuraava tiedosto tekstieditorissa.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Lisää seuraava teksti alatilaan 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 käynnistää sen uudelleen komennolla.
Uudelleenkäynnistyksen jälkeen tiedosto luodaan automaattisesti määritettyyn kansioon.
Voit suorittaa Tarkista laajennus -komennon uudelleen varmistaaksesi, että laajennus on asennettu.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Salaustaulukon luominen
Luodaan nyt salattu taulukko.
Luo samanlainen taulukko kuin meillä oli aiemmin, mutta lisää nyt vaihtoehtoihin ENCRYPTION='Y'
.
Tämä salausasetus ei näytä olevan määritettävissä 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 määrität laajennuksen, vaikka yrittäisit luoda salaustaulukon, saat seuraavan virheen.
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 samanlaisia tietoja.
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
Taulukkotiedosto on luotu, joten tarkistetaan sisältö.
Tiedosto on salattu, eikä tietueen sisältöä voida vahvistaa.
Toistaiseksi minun ei enää tarvitse huolehtia siitä, että voin lukea sisällä olevia tietueita vain kirjautumalla palvelimelle kolmannen osapuolen kanssa ja varastamalla taulukkotiedoston suoraan. Mielestäni se on helppo suojausasetus, koska toteutusta ei tarvitse muuttaa ollenkaan.
Jos kuitenkin kirjaudut tietokantaan, näet tiedot normaalisti. Jos haluat parantaa turvallisuustasoa, sinun on hallittava tietokannan kirjautumistilejä ja otettava käyttöön erillinen salausmekanismi.
Muunna salatuiksi taulukoiksi matkan varrella
Jos luot salaamattoman taulukon, 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';
Varo kuitenkin, ettet kirjoita kaikkia taulukkotiedostoja uudelleen, sillä se kestää kauan, jos tietueita on liikaa.