التشفير الشفاف (TDE) لجداول MySQL (Windows)
بيئة تأكيد التشغيل
- MySQL
-
- إصدار مجتمع MySQL 8.0
- نوافذ
-
- نوافذ 11
البيئة المطلوبة
- MySQL
-
- إصدار مجتمع MySQL 8.0
- MySQL 8.0 إصدار المؤسسة
- نوافذ
-
- نوافذ 11
- نوافذ 10
- خادم ويندوز
-
- ويندوز سيرفر 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');
عند إنشاء قاعدة بيانات أو جدول، يتم إنشاؤها في المجلدات التالية بشكل افتراضي:
- ج: \ ProgramData \ MySQL \ MySQL Server 8.0 \ Data
ProgramData
المجلد عبارة عن مجلد مخفي ، لذا تأكد من أنه مرئي في إعدادات مستكشف الملفات.
يوجد داخل المجلد مجلد باسم قاعدة البيانات التي قمت بإنشائها ، لذا افتحه
يوجد في الداخل ملفات على مستوى الجدول.
افتح هذا الملف في محرر نصوص مثل المفكرة. نظرا لأنه ملف ثنائي ، أعتقد أن هناك نصا لا أفهمه جيدا. إذا نظرت إلى الجزء السفلي ، سترى نص السجل المسجل.
إذا لم يتم تشفيره بهذه الطريقة ، فيمكنك معرفة محتويات السجل فقط عن طريق فتح الملف مباشرة. لست مضطرا لتسجيل الدخول إلى قاعدة البيانات لمعرفة ما بداخلها.
إعداد التشفير الشفاف
لتمكين التشفير الشفاف ، تحتاج إلى تثبيت مكون إضافي. أولا ، تحقق من الأمر لمعرفة ما إذا كان المكون الإضافي مضمنا.
حدد عميل سطر الأوامر MySQL 8.0 من قائمة ابدأ لتشغيله.
بمجرد إدخال كلمة المرور الخاصة بك وتسجيل الدخول ، أدخل الأمر التالي:
SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
لم أقم بتثبيته بعد ، لذا يجب أن يكون فارغا.
الآن دعنا نقوم بتكوين المكون الإضافي. أولا، قم بإنشاء المجلدات التالية: في الواقع ، المكان أو الاسم الذي تقوم بإنشائه جيد. حدده كموقع لحفظ ملف المفتاح لاحقا.
- ج: \ ProgramData \ MySQL \ mysql-keyring
ثم افتح الملف التالي في محرر نصوص.
- ج: \ 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 Plugin مرة أخرى للتحقق من تثبيت المكون الإضافي.
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';
ومع ذلك ، احرص على عدم إعادة كتابة جميع ملفات الجدول ، حيث سيستغرق الأمر وقتا طويلا إذا كان هناك عدد كبير جدا من السجلات.