Penyulitan Telus (TDE) untuk Jadual MySQL (Windows)
Persekitaran pengesahan operasi
- Mysql
-
- Edisi Komuniti MySQL 8.0
- Windows
-
- Windows 11
Persekitaran yang diperlukan
- Mysql
-
- Edisi Komuniti MySQL 8.0
- MySQL 8.0 Enterprise Edition
- Windows
-
- Windows 11
- Windows 10
- Pelayan Windows
-
- Pelayan Windows 2022
- Pelayan Windows 2019
- Windows Server 2016
- Windows Server 2012 R2
prasyarat
- Pangkalan data MySQL mesti dipasang
Mengenai Penyulitan Telus
Penyulitan Data Telus (Penyulitan Data Telus Perusahaan) ialah teknologi yang menyulitkan seperti namanya, dan ia lebih selamat daripada tidak melakukan ini. Biasanya, apabila penyulitan dilakukan, ia sering menjadi beban kepada pelaksana kerana perlu melakukan penyulitan dan pemprosesan penyahsulitan. Maksud "telus" ini ialah ia boleh disulitkan tanpa pelaksana membuat sebarang perubahan pada pemprosesan. Oleh itu, ia adalah langkah keselamatan yang sangat berkesan kerana ia disulitkan sendiri selepas hanya sedikit pengubahsuaian tetapan pada permulaan.
Walau bagaimanapun, seperti yang dicadangkan oleh frasa "tidak perlu membuat sebarang perubahan", jika anda benar-benar log masuk ke pangkalan data, anda boleh melihat data seperti biasa, dan jika anda mendapat rekod pangkalan data daripada program, anda boleh melihat data seperti biasa. Sekiranya data yang diperoleh disulitkan, perlu membuat perubahan pada pemprosesan, jadi ia tidak akan sepadan dengan pernyataan "tiada perubahan diperlukan untuk pemprosesan".
Jadi, apa sebenarnya penyulitan telus dalam MySQL, dan "fail pangkalan data yang disimpan" atau "fail jadual" disulitkan. Seperti yang akan saya semak kemudian, walaupun anda membuka fail secara langsung, ia hanya disulitkan supaya kandungannya tidak dapat dilihat, jadi perlu mengendalikannya supaya ia tidak log masuk ke pangkalan data dalam operasi sebenar.
Buat jadual seperti biasa dan semak kandungannya
Mula-mula, mari kita buat jadual dan rekod seperti biasa. Anda boleh menciptanya mengikut kehendak anda, tetapi kali ini saya akan menjalankan SQL di Workbench untuk menciptanya. Kali ini, kami merancang untuk menyediakan penyulitan telus untuk jadual, jadi kami akan membuat pangkalan data seperti biasa.
CREATE DATABASE `test_database`
Saya juga membuat meja seperti biasa. Walau apa pun kandungan lajur, ia boleh berlaku.
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;
Simpan rekod untuk menyemak penyulitan.
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');
Apabila anda mencipta pangkalan data atau jadual, ia dicipta dalam folder berikut secara lalai:
- C:\ProgramData\MySQL\MySQL Server 8.0\Data
ProgramData
Folder ialah folder tersembunyi, jadi pastikan ia kelihatan dalam tetapan File Explorer.
Di dalam folder terdapat folder dengan nama pangkalan data yang anda buat, jadi buka.
Di dalamnya terdapat fail peringkat jadual.
Buka fail ini dalam editor teks seperti Notepad. Oleh kerana ia adalah fail binari, saya fikir pada dasarnya terdapat teks yang saya tidak faham dengan baik. Jika anda melihat di bahagian bawah, anda akan melihat teks rekod berdaftar.
Jika ia tidak disulitkan dengan cara ini, anda boleh mengetahui kandungan rekod hanya dengan membuka fail secara langsung. Anda tidak perlu log masuk ke pangkalan data untuk mengetahui apa yang ada di dalamnya.
Sediakan penyulitan telus
Untuk mendayakan Penyulitan Telus, anda perlu memasang pemalam. Mula-mula, semak arahan untuk melihat sama ada pemalam disertakan.
Pilih Klien Baris Arahan MySQL 8.0 daripada menu Mula untuk melancarkannya.
Sebaik sahaja anda telah memasukkan kata laluan anda dan log masuk, masukkan arahan berikut:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Saya belum memasangnya lagi, jadi ia sepatutnya kosong.
Sekarang mari kita konfigurasikan pemalam. Mula-mula, buat folder berikut: Malah, tempat atau nama yang anda buat adalah baik-baik saja. Tentukan sebagai lokasi untuk menyimpan fail kunci kemudian.
- C:\ProgramData\MySQL\mysql-keyring
Kemudian buka fail berikut dalam editor teks.
- C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Tambahkan teks berikut ke ruang bawah dan simpan. Jika anda tidak dapat menyimpan dengan keistimewaan pentadbir, anda boleh menyimpannya ke lokasi lain dan kemudian menimpa fail.
early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring
Mulakan semula perkhidmatan MySQL. Anda boleh memulakannya semula dengan arahan.
Selepas memulakan semula, fail akan dibuat secara automatik dalam folder yang ditentukan.
Anda boleh menjalankan arahan Semak Pemalam sekali lagi untuk mengesahkan bahawa pemalam telah dipasang.
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
Mencipta jadual penyulitan
Sekarang mari kita buat jadual yang disulitkan.
Buat jadual yang serupa dengan yang kita ada sebelum ini, tetapi kini tambah pada pilihan ENCRYPTION='Y'
.
Tetapan penyulitan ini nampaknya tidak boleh dikonfigurasikan dalam GUI pada masa ini, jadi ia mesti ditetapkan mengikut arahan.
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;
Dengan cara ini, sebelum menyediakan pemalam, walaupun anda cuba membuat jadual penyulitan, anda akan menerima ralat berikut.
Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。
Jika anda tidak mempunyai data, anda tidak tahu sama ada ia disulitkan, jadi saya akan cuba meletakkan data yang serupa.
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
Fail jadual telah dibuat, jadi mari kita semak kandungannya.
Fail telah disulitkan dan kandungan rekod tidak dapat disahkan.
Buat masa ini, saya tidak perlu lagi risau tentang dapat membaca rekod di dalamnya hanya dengan log masuk ke pelayan dengan pihak ketiga dan mencuri fail jadual secara langsung. Saya fikir ia adalah tetapan keselamatan yang mudah kerana tidak perlu mengubah pelaksanaan sama sekali.
Walau bagaimanapun, jika anda log masuk ke pangkalan data, anda boleh melihat data seperti biasa. Sekiranya anda ingin meningkatkan tahap keselamatan, anda perlu menguruskan akaun log masuk pangkalan data dan memperkenalkan mekanisme penyulitan yang berasingan.
Tukar kepada jadual yang disulitkan di sepanjang jalan
Jika anda mencipta jadual yang tidak disulitkan di tempat pertama, anda boleh menukarnya kepada jadual yang disulitkan kemudian. Dalam kes itu, anda boleh menukarnya dengan SQL berikut:
use <データベース名>;
ALTER TABLE <テーブル名> ENCRYPTION='Y';
Sebagai contoh
use test_database;
ALTER TABLE plain_user ENCRYPTION='Y';
Walau bagaimanapun, berhati-hati untuk tidak menulis semula semua fail jadual, kerana ia akan mengambil masa yang lama jika terdapat terlalu banyak rekod.