Thực thi mã hóa trong suốt (TDE) trên bảng MySQL (phiên bản Windows)

Trang Cập Nhật :
Ngày tạo trang :

Môi trường hoạt động

MySQL
  • Phiên bản cộng đồng MySQL 8.0
Windows
  • cửa sổ 11

Điều kiện tiên quyết

MySQL
  • Phiên bản cộng đồng MySQL 8.0
  • Phiên bản doanh nghiệp MySQL 8.0
Windows
  • cửa sổ 11
  • cửa sổ 10
Máy chủ Windows
  • Máy chủ Windows 2022
  • Máy chủ Windows 2019
  • Máy chủ Windows 2016
  • Máy chủ Windows 2012 R2

Điều kiện tiên quyết

  • Cơ sở dữ liệu cho MySQL được cài đặt.

Giới thiệu về mã hóa minh bạch

Mã hóa dữ liệu minh bạch doanh nghiệp, như tên của nó, là một công nghệ mã hóa an toàn hơn bất kỳ thứ gì không có. Thông thường, khi mã hóa, nó thường là gánh nặng cho người triển khai vì cần phải thực hiện xử lý mã hóa và giải mã. Ý nghĩa của tên "minh bạch" này là nó có thể được mã hóa mà không cần người triển khai thực hiện bất kỳ thay đổi nào đối với quy trình. Do đó, nếu bạn thực hiện một vài thay đổi đối với cài đặt ngay từ đầu, phần còn lại sẽ được mã hóa mà không được phép, vì vậy đây là một biện pháp bảo mật rất hiệu quả.

Tuy nhiên, như cụm từ "không cần thay đổi bất cứ điều gì" cho thấy, nếu bạn thực sự đăng nhập vào cơ sở dữ liệu, bạn có thể xem dữ liệu bình thường và nếu bạn nhận được bản ghi cơ sở dữ liệu từ chương trình, bạn có thể xem dữ liệu bình thường. Nếu dữ liệu thu được được mã hóa, sẽ cần phải thay đổi quy trình, vì vậy nó sẽ không khớp với từ ngữ "Không cần thay đổi quy trình".

Sau đó, trong MySQL, chính xác mã hóa trong suốt là gì được mã hóa, "tệp cơ sở dữ liệu được lưu trữ" hoặc "tệp bảng" phải được mã hóa. Như chúng tôi sẽ kiểm tra sau, ngay cả khi bạn mở tệp trực tiếp, nó chỉ mã hóa nó để bạn không thể xem nội dung, vì vậy cần phải vận hành nó để nó không được đăng nhập vào cơ sở dữ liệu trong hoạt động thực tế.

Tạo một bảng bình thường và kiểm tra nội dung

Đầu tiên, hãy tạo một bảng và ghi lại bình thường. Bạn có thể tạo nó theo cách bạn muốn, nhưng trong trường hợp này, chúng ta sẽ tạo nó bằng cách thực thi SQL trong Workbench. Trong trường hợp này, chúng tôi dự định đặt mã hóa minh bạch cho bảng, vì vậy chúng tôi sẽ tạo cơ sở dữ liệu bình thường.

CREATE DATABASE `test_database`

Bàn cũng được làm bình thường. Nội dung của cột có thể là bất cứ điều gì.

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;

Tôi cũng sẽ đưa vào một bản ghi ngẫu nhiên để kiểm tra mã hóa.

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

Khi bạn tạo cơ sở dữ liệu hoặc bảng, nó được tạo trong thư mục sau theo mặc định.

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

ProgramData Thư mục bị ẩn, vì vậy hãy hiển thị nó trong cài đặt Explorer.

Có một thư mục với tên của cơ sở dữ liệu bạn đã tạo trong thư mục, vì vậy hãy mở nó.

Bên trong có một tập tin từng bảng.

Mở tệp này trong trình soạn thảo văn bản như Notepad. Vì nó là một tệp nhị phân, tôi nghĩ rằng về cơ bản có một dòng văn bản mà tôi không hiểu rõ. Nếu bạn nhìn vào phía dưới, bạn sẽ thấy văn bản của hồ sơ đã đăng ký.

Nếu nó không được mã hóa theo cách này, nội dung của bản ghi sẽ được biết ngay cả khi tệp được mở trực tiếp. Bạn không cần phải đăng nhập vào cơ sở dữ liệu để biết những gì bên trong.

Định cấu hình cài đặt mã hóa minh bạch

Để bật mã hóa trong suốt, bạn cần cài đặt trình cắm. Trước tiên, hãy kiểm tra xem trình cắm có được bao gồm trong lệnh hay không.

Bắt đầu nó bằng cách chọn "MySQL 8.0 Command Line Client" từ menu Start.

Sau khi nhập mật khẩu và đăng nhập, hãy nhập lệnh sau:

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

Vì bạn chưa cài đặt nó, nó sẽ trống.

Bây giờ, hãy thiết lập trình cắm. Đầu tiên, tạo các thư mục sau: Trên thực tế, không quan trọng bạn tạo nó ở đâu hoặc nó có tên gì. Chỉ định nó làm vị trí mà bạn muốn lưu tệp khóa sau này.

  • C: \ ProgramData \ MySQL \ mysql-keyring

Tiếp theo, mở tệp sau trong trình soạn thảo văn bản:

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

Thêm văn bản sau vào khoảng trống ở dưới cùng và lưu nó. Nếu bạn không thể lưu với đặc quyền của quản trị viên, bạn có thể lưu nó vào một vị trí khác và sau đó ghi đè lên tệp.

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

Khởi động lại dịch vụ MySQL. Bạn cũng có thể khởi động lại nó bằng lệnh.

Khi bạn khởi động lại, tệp sẽ tự động được tạo trong thư mục được chỉ định.

Bạn có thể xác minh rằng trình cắm đã được cài đặt bằng cách chạy lại lệnh kiểm tra trình cắm.

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

Tạo bảng được mã hóa

Bây giờ chúng ta hãy tạo một bảng được mã hóa. Tạo một bảng tương tự như bảng trước, nhưng lần này thêm vào các ENCRYPTION='Y' tùy chọn. Cài đặt mã hóa này dường như không thể thực hiện được trong GUI tại thời điểm này, vì vậy nó phải được đặt bằng lệnh.

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;

Nhân tiện, trước khi trình cắm được định cấu hình, ngay cả khi bạn cố gắng tạo một bảng được mã hóa, lỗi sau sẽ được hiển thị.

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

Nếu bạn không có bất kỳ dữ liệu nào, bạn không biết liệu nó có được mã hóa hay không, vì vậy tôi sẽ cố gắng đặt cùng một dữ liệu.

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 Vì tệp bảng đã được tạo, hãy kiểm tra nội dung.

Tệp đã được mã hóa và không thể xác minh nội dung của bản ghi.

Hiện tại, bạn không còn phải lo lắng về việc bên thứ ba đọc các bản ghi bên trong chỉ bằng cách đăng nhập vào máy chủ và đánh cắp tệp bảng trực tiếp. Không cần phải thay đổi việc triển khai, vì vậy tôi nghĩ đó là một cài đặt bảo mật dễ dàng.

Tuy nhiên, nếu bạn đăng nhập vào cơ sở dữ liệu, bạn có thể xem dữ liệu bình thường. Nếu bạn muốn tăng mức độ bảo mật, bạn cần quản lý tốt tài khoản đăng nhập cơ sở dữ liệu và giới thiệu một cơ chế mã hóa riêng biệt.

Chuyển đổi sang bảng được mã hóa trên đường đi

Nếu ban đầu bạn tạo một bảng không được mã hóa, bạn có thể chuyển đổi bảng đó thành bảng được mã hóa sau. Trong trường hợp đó, bạn có thể chuyển đổi nó bằng SQL sau:

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

ví dụ

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

Tuy nhiên, xin lưu ý rằng sẽ mất thời gian nếu có nhiều bản ghi vì tất cả các tệp bảng được viết lại.