MySQL टेबल्स (विंडोज संस्करण) पर पारदर्शी एन्क्रिप्शन (TDE) लागू करें

पेज अद्यतन :
पेज निर्माण की तारीख :

ऑपरेटिंग वातावरण

MySQL
  • MySQL 8.0 सामुदायिक संस्करण
विंडोज़
  • विंडोज 11

आवश्यकताएँ

MySQL
  • MySQL 8.0 सामुदायिक संस्करण
  • MySQL 8.0 एंटरप्राइज़ संस्करण
विंडोज़
  • विंडोज 11
  • विंडोज 10
विंडोज सर्वर
  • विंडोज सर्वर 2022
  • विंडोज सर्वर 2019
  • विंडोज सर्वर 2016
  • विंडोज सर्वर 2012 आर 2

पूर्व शर्त

  • MySQL के लिए एक डेटाबेस स्थापित किया गया है।

पारदर्शी एन्क्रिप्शन के बारे में

एंटरप्राइज़ पारदर्शी डेटा एन्क्रिप्शन, जैसा कि नाम से ही स्पष्ट है, एक एन्क्रिप्शन तकनीक है जो किसी भी चीज़ से अधिक सुरक्षित है जो नहीं करती है। आम तौर पर, एन्क्रिप्ट करते समय, यह अक्सर कार्यान्वयनकर्ता पर बोझ होता है क्योंकि एन्क्रिप्शन और डिक्रिप्शन प्रोसेसिंग करना आवश्यक होता है। इस नाम "पारदर्शी" का अर्थ यह है कि इसे कार्यान्वयनकर्ता द्वारा प्रक्रिया में कोई बदलाव किए बिना एन्क्रिप्ट किया जा सकता है। इसलिए, यदि आप शुरुआत में सेटिंग्स में कुछ बदलाव करते हैं, तो बाकी को बिना अनुमति के एन्क्रिप्ट किया जाएगा, इसलिए यह एक बहुत ही प्रभावी सुरक्षा उपाय है।

हालाँकि, वाक्यांश "कुछ भी बदलने की आवश्यकता नहीं है" से पता चलता है, यदि आप वास्तव में डेटाबेस में लॉग इन करते हैं, तो आप डेटा को सामान्य रूप से देख सकते हैं, और यदि आपको प्रोग्राम से डेटाबेस रिकॉर्ड मिलता है, तो आप डेटा को सामान्य रूप से देख सकते हैं। यदि अधिग्रहित डेटा एन्क्रिप्ट किया गया है, तो प्रक्रिया को बदलना आवश्यक होगा, इसलिए यह "प्रक्रिया को बदलने की आवश्यकता नहीं" शब्दों से मेल नहीं खाएगा।

फिर, MySQL में, वास्तव में पारदर्शी एन्क्रिप्शन क्या है, एन्क्रिप्ट किया गया है, "संग्रहीत डेटाबेस फ़ाइलें" या "टेबल फ़ाइलें" एन्क्रिप्शन के अधीन हैं। जैसा कि हम बाद में जांच करेंगे, भले ही आप फ़ाइल को सीधे खोलते हैं, यह केवल इसे एन्क्रिप्ट करता है ताकि आप सामग्री को न देख सकें, इसलिए इसे संचालित करना आवश्यक है ताकि यह वास्तविक ऑपरेशन में डेटाबेस में लॉग इन न हो।

सामान्य रूप से एक तालिका बनाएं और सामग्री की जांच करें

सबसे पहले, चलो एक तालिका बनाते हैं और सामान्य रूप से रिकॉर्ड करते हैं। आप इसे अपनी इच्छानुसार बना सकते हैं, लेकिन इस मामले में, हम इसे वर्कबेंच में SQL निष्पादित करके बनाएंगे। इस मामले में, हम तालिका के लिए पारदर्शी एन्क्रिप्शन सेट करने की योजना बनाते हैं, इसलिए हम सामान्य रूप से डेटाबेस बनाएंगे।

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 सर्वर 8.0\Data

ProgramData फ़ोल्डर छिपा हुआ है, इसलिए इसे एक्सप्लोरर सेटिंग्स में दृश्यमान बनाएं।

फ़ोल्डर में आपके द्वारा बनाए गए डेटाबेस के नाम के साथ एक फ़ोल्डर है, इसलिए इसे खोलें।

अंदर एक टेबल-दर-टेबल फ़ाइल है।

इस फ़ाइल को किसी पाठ संपादक जैसे Notepad में खोलें. चूंकि यह एक बाइनरी फ़ाइल है, मुझे लगता है कि मूल रूप से पाठ की एक पंक्ति है जिसे मैं अच्छी तरह से समझ नहीं पा रहा हूं। यदि आप नीचे देखते हैं, तो आपको पंजीकृत रिकॉर्ड का पाठ दिखाई देगा।

यदि इसे इस तरह से एन्क्रिप्ट नहीं किया गया है, तो रिकॉर्ड की सामग्री को पता चल जाएगा, भले ही फ़ाइल सीधे खोली गई हो। अंदर क्या है, यह जानने के लिए आपको डेटाबेस में लॉग इन करने की आवश्यकता नहीं है।

पारदर्शी एन्क्रिप्शन सेटिंग्स कॉन्फ़िगर करना

पारदर्शी एन्क्रिप्शन सक्षम करने के लिए, आपको प्लग-इन स्थापित करना होगा. सबसे पहले, जांचें कि प्लग-इन कमांड के साथ शामिल है या नहीं।

स्टार्ट मेनू से "MySQL 8.0 कमांड लाइन क्लाइंट" का चयन करके इसे शुरू करें।

अपना पासवर्ड दर्ज करने और लॉग इन करने के बाद, निम्न कमांड दर्ज करें:

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

चूंकि आपने इसे अभी तक स्थापित नहीं किया है, इसलिए यह खाली होना चाहिए।

अब, प्लग में स्थापित की सुविधा देता है. सबसे पहले, निम्न फ़ोल्डर बनाएँ: वास्तव में, इससे कोई फर्क नहीं पड़ता कि आप इसे कहां बनाते हैं या इसका नाम क्या है। इसे उस स्थान के रूप में निर्दिष्ट करें जहाँ आप कुंजी फ़ाइल को बाद में सहेजना चाहते हैं.

  • C:\ProgramData\MySQL\mysql-keyring

अगला, एक पाठ संपादक में निम्न फ़ाइल खोलें:

  • C:\ProgramData\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';

हालाँकि, कृपया ध्यान दें कि यदि कई रिकॉर्ड हैं तो इसमें समय लगेगा क्योंकि सभी तालिका फ़ाइलें फिर से लिखी गई हैं।