บังคับใช้การเข้ารหัสแบบโปร่งใส (TDE) บนตาราง MySQL (เวอร์ชัน Windows)
สภาพแวดล้อมในการทํางาน
- MySQL
-
- MySQL 8.0 รุ่นชุมชน
- หน้าต่าง
-
- หน้าต่าง 11
เบื้องต้น
- MySQL
-
- MySQL 8.0 รุ่นชุมชน
- MySQL 8.0 องค์กร Edition
- หน้าต่าง
-
- หน้าต่าง 11
- หน้าต่าง 10
- เซิร์ฟเวอร์ Windows
-
- เซิร์ฟเวอร์ Windows 2022
- เซิร์ฟเวอร์ Windows 2019
- เซิร์ฟเวอร์ Windows 2016
- R2 Windows Server ๒๐๑๒
เงื่อนไขเบื้องต้น
- มีการติดตั้งฐานข้อมูลสําหรับ 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 \\ ข้อมูล
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 ใหม่ คุณยังสามารถรีสตาร์ทได้ด้วยคําสั่ง
เมื่อคุณรีสตาร์ทไฟล์จะถูกสร้างขึ้นโดยอัตโนมัติในโฟลเดอร์ที่ระบุ
คุณสามารถตรวจสอบได้ว่ามีการติดตั้งปลั๊กอินแล้ว โดยการเรียกใช้คําสั่งตรวจสอบปลั๊กอินอีกครั้ง
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';
อย่างไรก็ตาม โปรดทราบว่าจะใช้เวลาหากมีระเบียนจํานวนมาก เนื่องจากไฟล์ตารางทั้งหมดจะถูกเขียนใหม่