Xifratge transparent (TDE) per a taules MySQL (Windows)

Data de creació de la pàgina :

Entorn de confirmació d'operació

MySQL
  • MySQL 8.0 Edició de la Comunitat
Windows
  • Windows 11

Entorn requerit

MySQL
  • MySQL 8.0 Edició de la Comunitat
  • MySQL 8.0 Enterprise Edition
Windows
  • Windows 11
  • Windows 10
Servidor Windows
  • Servidor de Windows 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

Precondició

  • S'ha d'instal·lar la base de dades MySQL

Sobre el xifratge transparent

El xifratge transparent de dades (Enterprise Transparent Data Encryption) és una tecnologia que xifra com el seu nom indica, i és més segur que no fer-ho. Normalment, quan es realitza el xifrat, sovint és una càrrega per a l'implementador perquè és necessari realitzar el processament de xifratge i desxifrat. El significat d'aquest "transparent" és que es pot xifrar sense que l'implementador faci cap canvi en el processament. Per tant, és una mesura de seguretat molt eficaç perquè es xifra per si sola després d'un petit ajust de la configuració al principi.

No obstant això, com suggereix la frase "no cal fer cap canvi", si realment inicieu sessió a la base de dades, podeu veure les dades normalment, i si obteniu els registres de la base de dades del programa, podeu veure les dades normalment. Si les dades obtingudes estan encriptades, caldrà fer canvis en el tractament, per la qual cosa no coincidirà amb l'enunciat "no es requereixen canvis en el tractament".

Per tant, què és exactament el xifratge transparent a MySQL i els "fitxers de base de dades emmagatzemats" o "fitxers de taula" estan xifrats. Com comprovaré més endavant, encara que obriu el fitxer directament, només està xifrat perquè no es pugui veure el contingut, per la qual cosa cal operar-lo perquè no iniciï sessió a la base de dades en funcionament real.

Creeu una taula amb normalitat i comproveu-ne el contingut

En primer lloc, creem una taula i un registre normalment. Podeu crear-lo com vulgueu, però aquesta vegada executaré SQL al Workbench per crear-lo. Aquesta vegada, tenim previst configurar un xifratge transparent per a la taula, de manera que crearem una base de dades normalment.

CREATE DATABASE `test_database`

També faig una taula normalment. Sigui quin sigui el contingut de la columna, pot ser-ho.

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;

Mantingueu un registre per comprovar l'encriptació.

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 les carpetes següents per defecte:

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

ProgramData La carpeta és una carpeta oculta, així que assegureu-vos que sigui visible a la configuració de l'Explorador de fitxers.

Dins de la carpeta hi ha una carpeta amb el nom de la base de dades que heu creat, així que obriu-la.

A l'interior hi ha fitxers a nivell de 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 text que no entenc bé. Si us fixeu a la part inferior, veureu el text del registre registrat.

Si no està xifrat d'aquesta manera, podeu conèixer el contingut del registre només obrint el fitxer directament. No cal que inicieu sessió a la base de dades per saber què hi ha dins.

Configurar l'encriptació transparent

Per habilitar el xifratge transparent, heu d'instal·lar un connector. Primer, comproveu l'ordre per veure si el connector està inclòs.

Seleccioneu MySQL 8.0 Client de línia d'ordres al menú Inici per iniciar-lo.

Un cop hàgiu introduït la contrasenya i iniciat la sessió, introduïu l'ordre següent:

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

Encara no l'he instal·lat, així que hauria d'estar buit.

Ara configurem el connector. Primer, creeu les carpetes següents: De fet, el lloc o el nom que creeu està bé. Especifiqueu-lo com a ubicació per desar el fitxer de 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 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. Podeu reiniciar-lo amb una ordre.

Després de reiniciar, el fitxer es crearà automàticament a la carpeta especificada.

Podeu tornar a executar l'ordre Check Plugin per verificar que el connector està instal·lat.

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

Creació d'una taula d'encriptació

Ara creem una taula xifrada. Crear una taula similar a la que teníem abans, però ara afegir a les opcions ENCRYPTION='Y' . Aquesta configuració de xifratge no sembla configurable a la GUI en aquest moment, per la qual cosa s'ha de configurar mitjançant 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 de xifratge, rebreu 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 teniu dades, no sabeu si estan xifrades, així que intentaré posar dades similars.

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 S'ha creat un fitxer de taula, així que comprovem el contingut.

El fitxer s'ha xifrat i no es pot verificar el contingut del registre.

De moment, ja no m'he de preocupar de poder llegir els registres que hi ha a l'interior només iniciant sessió al servidor amb un tercer i robant directament el fitxer de taula. Crec que és una configuració de seguretat fàcil perquè no cal canviar la implementació en absolut.

Tanmateix, si inicieu sessió a la base de dades, podeu veure les dades normalment. Si voleu augmentar el nivell de seguretat, heu de gestionar els comptes d'inici de sessió de la base de dades i introduir un mecanisme de xifratge independent.

Converteix a taules xifrades al llarg del camí

Si creeu una taula sense xifrar en primer lloc, podeu convertir-la en una taula xifrada més endavant. 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, aneu amb compte de no reescriure tots els fitxers de taula, ja que trigarà molt de temps si hi ha massa registres.