Επιβολή διαφανούς κρυπτογράφησης (TDE) σε πίνακες MySQL (έκδοση Windows)

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον λειτουργίας

MySQL
  • MySQL 8.0 Κοινότητα Edition
παράθυρα
  • Παράθυρα 11

Προϋποθέσεις

MySQL
  • MySQL 8.0 Κοινότητα Edition
  • MySQL 8.0 Enterprise Edition
παράθυρα
  • Παράθυρα 11
  • Παράθυρα 10
Διακομιστής των Windows
  • Τα Windows Server 2022
  • Τα Windows Server 2019
  • Τα Windows Server 2016
  • Windows Server 2012 R2

Προϋπόθεση

  • Έχει εγκατασταθεί μια βάση δεδομένων για MySQL.

Σχετικά με τη διαφανή κρυπτογράφηση

Η εταιρική διαφανής κρυπτογράφηση δεδομένων, όπως υποδηλώνει το όνομα, είναι μια τεχνολογία κρυπτογράφησης που είναι πιο ασφαλής από οτιδήποτε δεν το κάνει. Κανονικά, κατά την κρυπτογράφηση, είναι συχνά ένα βάρος για τον υλοποιητή επειδή είναι απαραίτητο να εκτελεστεί κρυπτογράφηση και επεξεργασία αποκρυπτογράφησης. Η έννοια αυτού του ονόματος "διαφανές" είναι ότι μπορεί να κρυπτογραφηθεί χωρίς ο υλοποιητής να κάνει αλλαγές στη διαδικασία. Επομένως, εάν κάνετε μερικές αλλαγές στις ρυθμίσεις στην αρχή, τα υπόλοιπα θα κρυπτογραφηθούν χωρίς άδεια, επομένως είναι ένα πολύ αποτελεσματικό μέτρο ασφαλείας.

Ωστόσο, όπως υποδηλώνει η φράση "δεν χρειάζεται να αλλάξετε τίποτα", εάν συνδεθείτε πραγματικά στη βάση δεδομένων, μπορείτε να δείτε τα δεδομένα κανονικά και εάν λάβετε την εγγραφή βάσης δεδομένων από το πρόγραμμα, μπορείτε να δείτε τα δεδομένα κανονικά. Εάν τα δεδομένα που αποκτήθηκαν είναι κρυπτογραφημένα, θα χρειαστεί να αλλάξετε τη διαδικασία, επομένως δεν θα ταιριάζει με τη διατύπωση "Δεν χρειάζεται να αλλάξετε τη διαδικασία".

Στη συνέχεια, στη MySQL, τι ακριβώς είναι η διαφανής κρυπτογράφηση κρυπτογραφείται, τα "αποθηκευμένα αρχεία βάσης δεδομένων" ή τα "αρχεία πίνακα" υπόκεινται σε κρυπτογράφηση. Όπως θα ελέγξουμε αργότερα, ακόμα κι αν ανοίξετε απευθείας το αρχείο, το κρυπτογραφεί μόνο έτσι ώστε να μην μπορείτε να δείτε τα περιεχόμενα, επομένως είναι απαραίτητο να το λειτουργήσετε έτσι ώστε να μην είναι συνδεδεμένο στη βάση δεδομένων σε πραγματική λειτουργία.

Δημιουργήστε έναν πίνακα κανονικά και ελέγξτε τα περιεχόμενα

Αρχικά, ας δημιουργήσουμε έναν πίνακα και εγγραφές κανονικά. Μπορείτε να το δημιουργήσετε όπως θέλετε, αλλά σε αυτήν την περίπτωση, θα το δημιουργήσουμε εκτελώντας SQL στο Workbench. Σε αυτήν την περίπτωση, σχεδιάζουμε να ορίσουμε διαφανή κρυπτογράφηση για τον πίνακα, οπότε θα δημιουργήσουμε κανονικά τη βάση δεδομένων.

CREATE DATABASE `test_database`

Ο πίνακας γίνεται επίσης κανονικά. Τα περιεχόμενα της στήλης μπορεί να είναι οτιδήποτε.

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;

Θα βάλω επίσης μια τυχαία εγγραφή για να ελέγξω την κρυπτογράφηση.

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

Όταν δημιουργείτε μια βάση δεδομένων ή έναν πίνακα, δημιουργείται στον ακόλουθο φάκελο από προεπιλογή.

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

ProgramData Ο φάκελος είναι κρυφός, επομένως κάντε τον ορατό στις ρυθμίσεις του Explorer.

Υπάρχει ένας φάκελος με το όνομα της βάσης δεδομένων που δημιουργήσατε στο φάκελο, οπότε ανοίξτε τον.

Στο εσωτερικό υπάρχει ένα αρχείο πίνακα προς πίνακα.

Ανοίξτε αυτό το αρχείο σε ένα πρόγραμμα επεξεργασίας κειμένου όπως το Σημειωματάριο (Notepad). Δεδομένου ότι είναι ένα δυαδικό αρχείο, νομίζω ότι υπάρχει βασικά μια γραμμή κειμένου που δεν καταλαβαίνω καλά. Αν κοιτάξετε στο κάτω μέρος, θα δείτε το κείμενο της καταχωρημένης εγγραφής.

Εάν δεν είναι κρυπτογραφημένο με αυτόν τον τρόπο, τα περιεχόμενα της εγγραφής θα είναι γνωστά ακόμη και αν το αρχείο ανοίξει απευθείας. Δεν χρειάζεται να συνδεθείτε στη βάση δεδομένων για να μάθετε τι υπάρχει μέσα.

Διαμόρφωση διαφανών ρυθμίσεων κρυπτογράφησης

Για να ενεργοποιήσετε τη διαφανή κρυπτογράφηση, πρέπει να εγκαταστήσετε μια προσθήκη. Πρώτα, ελέγξτε εάν η προσθήκη περιλαμβάνεται στην εντολή.

Ξεκινήστε το επιλέγοντας "MySQL 8.0 Command Line Client" από το μενού Έναρξη.

Αφού εισαγάγετε τον κωδικό πρόσβασής σας και συνδεθείτε, πληκτρολογήστε την ακόλουθη εντολή:

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

Δεδομένου ότι δεν το έχετε εγκαταστήσει ακόμα, θα πρέπει να είναι άδειο.

Τώρα, ας ρυθμίσουμε την προσθήκη. Πρώτα, δημιουργήστε τους ακόλουθους φακέλους: Στην πραγματικότητα, δεν έχει σημασία πού το δημιουργείτε ή ποιο όνομα είναι. Καθορίστε το ως τη θέση όπου θέλετε να αποθηκεύσετε το αρχείο κλειδιού αργότερα.

  • C:\ProgramData\MySQL\mysql-μπρελόκ

Στη συνέχεια, ανοίξτε το ακόλουθο αρχείο σε ένα πρόγραμμα επεξεργασίας κειμένου:

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

Προσθέστε το παρακάτω κείμενο στον κενό χώρο στο κάτω μέρος και αποθηκεύστε το. Εάν δεν μπορείτε να αποθηκεύσετε με δικαιώματα διαχειριστή, μπορείτε να το αποθηκεύσετε σε άλλη θέση και, στη συνέχεια, να αντικαταστήσετε το αρχείο.

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

Επανεκκινήστε την υπηρεσία MySQL. Μπορείτε επίσης να το επανεκκινήσετε με την εντολή.

Όταν κάνετε επανεκκίνηση, το αρχείο δημιουργείται αυτόματα στον καθορισμένο φάκελο.

Μπορείτε να επαληθεύσετε ότι η προσθήκη είναι εγκατεστημένη εκτελώντας ξανά την εντολή check plug-in.

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

Δημιουργία κρυπτογραφημένου πίνακα

Τώρα ας δημιουργήσουμε έναν κρυπτογραφημένο πίνακα. Δημιουργήστε έναν πίνακα παρόμοιο με τον προηγούμενο, αλλά αυτή τη φορά προσθέστε στις ENCRYPTION='Y' επιλογές. Αυτή η ρύθμιση κρυπτογράφησης δεν φαίνεται να είναι δυνατή στο GUI αυτήν τη στιγμή, επομένως πρέπει να οριστεί με μια εντολή.

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;

Παρεμπιπτόντως, πριν ρυθμιστεί η προσθήκη, ακόμα κι αν προσπαθήσετε να δημιουργήσετε έναν κρυπτογραφημένο πίνακα, θα εμφανιστεί το ακόλουθο σφάλμα.

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

Εάν δεν έχετε δεδομένα, δεν ξέρετε αν είναι κρυπτογραφημένα, οπότε θα προσπαθήσω να βάλω τα ίδια δεδομένα.

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 Εφόσον έχει δημιουργηθεί το αρχείο πίνακα, ας ελέγξουμε τα περιεχόμενα.

Το αρχείο έχει κρυπτογραφηθεί και δεν είναι δυνατή η επαλήθευση των περιεχομένων της εγγραφής.

Προς το παρόν, δεν χρειάζεται πλέον να ανησυχείτε για ένα τρίτο μέρος που διαβάζει τις εγγραφές μέσα απλώς συνδέοντας τον διακομιστή και κλέβοντας απευθείας το αρχείο πίνακα. Δεν χρειάζεται να αλλάξετε καθόλου την εφαρμογή, οπότε νομίζω ότι είναι μια εύκολη ρύθμιση ασφαλείας.

Ωστόσο, εάν συνδεθείτε στη βάση δεδομένων, μπορείτε να δείτε τα δεδομένα κανονικά. Εάν θέλετε να αυξήσετε το επίπεδο ασφάλειας, πρέπει να διαχειριστείτε καλά τον λογαριασμό σύνδεσης βάσης δεδομένων και να εισαγάγετε έναν ξεχωριστό μηχανισμό κρυπτογράφησης.

Μετατροπή σε κρυπτογραφημένο πίνακα στην πορεία

Εάν δημιουργήσετε αρχικά έναν μη κρυπτογραφημένο πίνακα, μπορείτε να τον μετατρέψετε σε κρυπτογραφημένο πίνακα αργότερα. Σε αυτήν την περίπτωση, μπορείτε να το μετατρέψετε με την ακόλουθη SQL:

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

παράδειγμα

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

Ωστόσο, λάβετε υπόψη ότι θα χρειαστεί χρόνος εάν υπάρχουν πολλές εγγραφές, επειδή όλα τα αρχεία πίνακα ξαναγράφονται.