Apliqueu el xifratge transparent (TDE) a les taules MySQL (versió Windows)
Entorn operatiu
- MySQL
-
- MySQL 8.0 Community Edition
- Windows
-
- Finestres 11
Prerequisits
- MySQL
-
- MySQL 8.0 Community Edition
- MySQL 8.0 Edició d'empresa
- Windows
-
- Finestres 11
- Windows 10
- Windows Server
-
- Windows Servidor 2022
- Windows Servidor 2019
- Windows Servidor 2016
- Windows Servidor 2012 R2
Precondició
- S'instal·la una base de dades per MySQL.
Sobre el xifratge transparent
El xifratge de dades transparent empresarial, com el seu nom indica, és una tecnologia de xifratge més segura que qualsevol cosa que no ho faci. Normalment, quan es xifra, sovint és una càrrega per a l'implementador perquè és necessari realitzar el processament de xifrat i desxifrat. El significat d'aquest nom "transparent" és que es pot xifrar sense que l'implementador faci cap canvi en el procés. Per tant, si feu alguns canvis a la configuració al principi, la resta es xifrarà sense permís, per la qual cosa és una mesura de seguretat molt eficaç.
Tanmateix, com suggereix la frase "no cal canviar res", si realment inicieu sessió a la base de dades, podeu veure les dades normalment, i si obteniu el registre de la base de dades del programa, podeu veure les dades normalment. Si les dades adquirides estan xifrades, caldrà canviar el procés, per la qual cosa no coincidirà amb la redacció "No cal canviar el procés".
Després, a MySQL, el que és exactament xifratge transparent és xifrar, els "fitxers de base de dades emmagatzemats" o els "fitxers de taula" estan subjectes a xifratge. Com comprovarem més endavant, encara que obris el fitxer directament, només el xifra perquè no puguis veure el contingut, per la qual cosa cal operar-lo perquè no estigui connectat a la base de dades en funcionament real.
Crea una taula amb normalitat i comprova'n el contingut
En primer lloc, creem una taula i registrem normalment. Podeu crear-lo com vulgueu, però en aquest cas, el crearem executant SQL a Workbench. En aquest cas, tenim previst establir un xifratge transparent per a la taula, de manera que crearem la base de dades normalment.
CREATE DATABASE `test_database`
La taula també es fa normalment. El contingut de la columna pot ser qualsevol cosa.
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;
També posaré un registre aleatori per comprovar el xifratge.
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');
Quan creeu una base de dades o taula, es crea a la carpeta següent per defecte.
- C: \ ProgramData \ MySQL \ MySQL Server 8.0 \ Data
ProgramData
La carpeta està oculta, així que feu-la visible a la configuració de l'Explorador.
Hi ha una carpeta amb el nom de la base de dades que heu creat a la carpeta, així que obriu-la.
A l'interior hi ha un fitxer taula per taula.
Obriu aquest fitxer en un editor de text com ara el Bloc de notes. Com que és un fitxer binari, crec que bàsicament hi ha una línia de text que no entenc bé. Si mireu a la part inferior, veureu el text del registre registrat.
Si no està xifrat d'aquesta manera, es coneixerà el contingut del registre encara que el fitxer s'obri directament. No cal que inicieu sessió a la base de dades per saber què hi ha dins.
Configuració de paràmetres de xifratge transparents
Per habilitar el xifratge transparent, heu d'instal·lar un connector. En primer lloc, comproveu si el connector està inclòs amb l'ordre.
Comenceu-lo seleccionant "MySQL 8.0 Client de línia d'ordres" al menú Inici.
Després d'introduir la contrasenya i iniciar la sessió, introduïu l'ordre següent:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Com que encara no l'heu instal·lat, hauria d'estar buit.
Ara, configurem el connector. Primer, creeu les carpetes següents: De fet, no importa on el creeu ni quin nom tingui. Especifiqueu-la com la ubicació on voleu desar el fitxer de la clau més endavant.
- C:\ProgramData\MySQL\mysql-keyring
A continuació, obriu el fitxer següent en un editor de text:
- C: \ ProgramData \ MySQL \ MySQL Server 8.0 \ my.ini
Afegiu el text següent a l'espai buit de la part inferior i deseu-lo. Si no podeu desar amb privilegis d'administrador, podeu desar-lo en una altra ubicació i sobreescriure el fitxer.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Reinicieu el servei MySQL. També podeu reiniciar-lo amb l'ordre.
Quan reinicieu, el fitxer es crea automàticament a la carpeta especificada.
Podeu verificar que el connector estigui instal·lat executant de nou l'ordre de comprovació del connector.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Creació d'una taula xifrada
Ara creem una taula xifrada.
Creeu una taula similar a l'anterior, però aquesta vegada afegiu-la a les ENCRYPTION='Y'
opcions.
Aquesta configuració de xifratge no sembla ser possible a la interfície gràfica d'usuari en aquest moment, de manera que s'ha d'establir amb una ordre.
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;
Per cert, abans de configurar el connector, fins i tot si intenteu crear una taula xifrada, es mostrarà el següent error.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Si no tens cap dada, no saps si està xifrada, així que intentaré posar les mateixes dades.
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
Atès que s'ha creat el fitxer de taula, comprovem el contingut.
El fitxer s'ha xifrat i no es pot verificar el contingut del registre.
De moment, ja no us haureu de preocupar que un tercer llegeixi els registres dins només iniciant sessió al servidor i robant directament el fitxer de la taula. No cal canviar la implementació en absolut, així que crec que és una configuració de seguretat fàcil.
No obstant això, si inicieu sessió a la base de dades, podreu veure les dades amb normalitat. Si voleu augmentar el nivell de seguretat, heu de gestionar bé el compte d'inici de sessió de la base de dades i introduir un mecanisme de xifratge independent.
Converteix en una taula xifrada al llarg del camí
Si inicialment crees una taula sense encriptar, més endavant pots convertir-la en una taula encriptada. En aquest cas, podeu convertir-lo amb el següent SQL:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
exemple
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Tanmateix, tingueu en compte que trigarà temps si hi ha molts registres perquè es reescriuen tots els fitxers de la taula.