فرض التشفير الشفاف (TDE) على جداول MySQL (إصدار Windows)

تحديث الصفحة :
تاريخ إنشاء الصفحة :

بيئة التشغيل

الخلية
  • MySQL 8.0 إصدار المجتمع
نوافذ
  • ويندوز ١١

المتطلبات المسبقه

الخلية
  • MySQL 8.0 إصدار المجتمع
  • MySQL 8.0 إصدار المؤسسة
نوافذ
  • ويندوز ١١
  • ويندوز ١٠
خادم ويندوز
  • ويندوز سيرفر 2022
  • ويندوز سيرفر 2019
  • ويندوز سيرفر 2016
  • ويندوز سيرفر 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');

عند إنشاء قاعدة بيانات أو جدول، يتم إنشاؤه في المجلد التالي بشكل افتراضي.

  • جيم : \\ بيانات البرنامج \\ MySQL \\ MySQL خادم 8.0 \\ البيانات

ProgramData المجلد مخفي ، لذا اجعله مرئيا في إعدادات Explorer.

يوجد مجلد باسم قاعدة البيانات التي أنشأتها في المجلد ، لذا افتحه.

يوجد في الداخل ملف جدول تلو الآخر.

افتح هذا الملف في محرر نصوص مثل المفكرة. نظرا لأنه ملف ثنائي ، أعتقد أن هناك سطرا من النص لا أفهمه جيدا. إذا نظرت إلى الأسفل ، سترى نص السجل المسجل.

إذا لم يتم تشفيره بهذه الطريقة ، فستعرف محتويات السجل حتى إذا تم فتح الملف مباشرة. ليس عليك تسجيل الدخول إلى قاعدة البيانات لمعرفة ما بداخلها.

تكوين إعدادات التشفير الشفافة

لتمكين التشفير الشفاف ، تحتاج إلى تثبيت مكون إضافي. أولا ، تحقق مما إذا كان المكون الإضافي مضمنا في الأمر.

ابدأ تشغيله عن طريق تحديد "عميل سطر أوامر MySQL 8.0" من قائمة ابدأ.

بعد إدخال كلمة المرور الخاصة بك وتسجيل الدخول ، أدخل الأمر التالي:

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

نظرا لأنك لم تقم بتثبيته بعد ، فيجب أن يكون فارغا.

الآن ، دعنا نقوم بإعداد المكون الإضافي. أولا، قم بإنشاء المجلدات التالية: في الواقع ، لا يهم مكان إنشائه أو اسمه. حدده كموقع حيث تريد حفظ ملف المفتاح لاحقا.

  • جيم : \\ بيانات البرنامج \\ MySQL \\ mysql - حلقة المفاتيح

بعد ذلك ، افتح الملف التالي في محرر نصوص:

  • جيم : \\ بيانات البرنامج \\ MySQL \\ خادم الخلية 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' . لا يبدو أن إعداد التشفير هذا ممكن في واجهة المستخدم الرسومية في الوقت الحالي ، لذلك يجب تعيينه بأمر.

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

ومع ذلك ، يرجى ملاحظة أن الأمر سيستغرق بعض الوقت إذا كان هناك العديد من السجلات لأنه يتم إعادة كتابة جميع ملفات الجدول.