MySQL جدول (Windows) کے لئے شفاف خفیہ کاری (TDE)

صفحہ تخلیق تاریخ :

کارروائی کی تصدیق کا ماحول

MySQL
  • MySQL 8.0 کمیونٹی ایڈیشن
Windows
  • ونڈوز 11

مطلوبہ ماحول

MySQL
  • MySQL 8.0 کمیونٹی ایڈیشن
  • MySQL 8.0 Enterprise Edition
Windows
  • ونڈوز 11
  • ونڈوز 10
Windows Server
  • ونڈوز سرور 2022
  • ونڈوز سرور 2019
  • ونڈوز سرور 2016
  • Windows Server 2012 R2

پیشگی شرائط

  • MySQL ڈیٹا بیس انسٹال ہونا ضروری ہے

شفاف خفیہ کاری کے بارے میں

شفاف ڈیٹا انکرپشن (انٹرپرائز ٹرانسپیرنٹ ڈیٹا انکرپشن) ایک ایسی ٹیکنالوجی ہے جو نام کے مطابق خفیہ کرتی ہے ، اور یہ ایسا نہ کرنے سے زیادہ محفوظ ہے۔ عام طور پر ، جب خفیہ کاری کی جاتی ہے تو ، یہ اکثر نفاذ کرنے والے پر بوجھ ہوتا ہے کیونکہ خفیہ کاری اور ڈیکریپشن پروسیسنگ انجام دینا ضروری ہے۔ اس "شفاف" کا مطلب یہ ہے کہ اسے عمل درآمد کنندہ کی پروسیسنگ میں کوئی تبدیلی کیے بغیر خفیہ کیا جاسکتا ہے۔ لہذا ، یہ ایک بہت مؤثر حفاظتی اقدام ہے کیونکہ یہ شروع میں ترتیبات میں تھوڑا سا تبدیلی کرنے کے بعد خود ہی انکرپٹڈ ہوتا ہے۔

تاہم ، جیسا کہ جملے "کوئی تبدیلی کرنے کی ضرورت نہیں" سے پتہ چلتا ہے ، اگر آپ واقعی ڈیٹا بیس میں لاگ ان کرتے ہیں تو ، آپ ڈیٹا کو عام طور پر دیکھ سکتے ہیں ، اور اگر آپ پروگرام سے ڈیٹا بیس ریکارڈ حاصل کرتے ہیں تو ، آپ ڈیٹا کو عام طور پر دیکھ سکتے ہیں۔ اگر حاصل کردہ ڈیٹا خفیہ کیا گیا ہے تو ، پروسیسنگ میں تبدیلیاں کرنا ضروری ہوگا ، لہذا یہ اس بیان سے میل نہیں کھائے گا "پروسیسنگ میں کوئی تبدیلی کی ضرورت نہیں ہے"۔

تو ، مائی ایس کیو ایل میں شفاف خفیہ کاری کیا ہے ، اور "ذخیرہ شدہ ڈیٹا بیس فائلیں" یا "ٹیبل فائلیں" خفیہ کی جاتی ہیں۔ جیسا کہ میں بعد میں چیک کروں گا ، یہاں تک کہ اگر آپ فائل کو براہ راست کھولتے ہیں تو ، یہ صرف خفیہ کیا جاتا ہے تاکہ مواد کو نہ دیکھا جاسکے ، لہذا اسے چلانا ضروری ہے تاکہ یہ اصل آپریشن میں ڈیٹا بیس میں لاگ ان نہ ہو۔

عام طور پر ایک جدول بنائیں اور مواد کی جانچ پڑتال کریں

سب سے پہلے، آئیے عام طور پر ایک جدول اور ایک ریکارڈ بنائیں. آپ اسے اپنی مرضی کے مطابق بنا سکتے ہیں ، لیکن اس بار میں اسے بنانے کے لئے ورک بنچ میں ایس کیو ایل چلاؤں گا۔ اس بار ، ہم جدول کے لئے شفاف خفیہ کاری قائم کرنے کا ارادہ رکھتے ہیں ، لہذا ہم عام طور پر ڈیٹا بیس بنائیں گے۔

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\Data

ProgramData فولڈر ایک پوشیدہ فولڈر ہے ، لہذا یقینی بنائیں کہ یہ فائل ایکسپلورر کی ترتیبات میں نظر آتا ہے۔

فولڈر کے اندر ایک فولڈر ہے جس میں آپ کے بنائے گئے ڈیٹا بیس کا نام ہے ، لہذا اسے کھولیں۔

اندر ٹیبل سطح کی فائلیں ہیں۔

اس فائل کو نوٹ پیڈ جیسے ٹیکسٹ ایڈیٹر میں کھولیں۔ چونکہ یہ ایک بائنری فائل ہے ، مجھے لگتا ہے کہ بنیادی طور پر متن ہے جسے میں اچھی طرح سے نہیں سمجھتا ہوں۔ اگر آپ نیچے دیکھیں تو ، آپ کو رجسٹرڈ ریکارڈ کا متن نظر آئے گا۔

اگر یہ اس طرح سے خفیہ نہیں کیا گیا ہے تو ، آپ فائل کو براہ راست کھول کر ریکارڈ کے مندرجات کو جان سکتے ہیں۔ اندر کیا ہے یہ جاننے کے لئے آپ کو ڈیٹا بیس میں لاگ ان کرنے کی ضرورت نہیں ہے۔

شفاف خفیہ کاری مرتب کریں

شفاف خفیہ کاری کو فعال کرنے کے لئے، آپ کو ایک پلگ ان انسٹال کرنے کی ضرورت ہے. سب سے پہلے ، یہ دیکھنے کے لئے کمانڈ چیک کریں کہ آیا پلگ ان شامل ہے۔

اسے لانچ کرنے کے لئے اسٹارٹ مینو سے 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 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' ۔ یہ خفیہ کاری کی ترتیب اس وقت جی یو آئی میں قابل ترتیب نہیں لگتی ہے ، لہذا اسے کمانڈ کے ذریعہ سیٹ کیا جانا چاہئے۔

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 ایک ٹیبل فائل بنائی گئی ہے ، لہذا آئیے مواد کی جانچ پڑتال کریں۔

فائل کو خفیہ کیا گیا ہے اور ریکارڈ کے مندرجات کی تصدیق نہیں کی جاسکتی ہے۔

فی الحال ، مجھے اب کسی تیسرے فریق کے ساتھ سرور میں لاگ ان کرکے اور ٹیبل فائل کو براہ راست چوری کرکے اندر ریکارڈ پڑھنے کے قابل ہونے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ میرے خیال میں یہ ایک آسان سیکیورٹی سیٹنگ ہے کیونکہ عمل درآمد کو تبدیل کرنے کی کوئی ضرورت نہیں ہے۔

تاہم ، اگر آپ ڈیٹا بیس میں لاگ ان کرتے ہیں تو ، آپ عام طور پر ڈیٹا دیکھ سکتے ہیں۔ اگر آپ سیکیورٹی کی سطح کو بڑھانا چاہتے ہیں تو ، آپ کو ڈیٹا بیس لاگ ان اکاؤنٹس کا انتظام کرنے اور ایک علیحدہ خفیہ کاری میکانزم متعارف کرانے کی ضرورت ہے۔

راستے میں خفیہ شدہ میزوں میں تبدیل کریں

اگر آپ پہلی جگہ پر غیر خفیہ شدہ ٹیبل بناتے ہیں تو ، آپ اسے بعد میں خفیہ شدہ ٹیبل میں تبدیل کرسکتے ہیں۔ اس صورت میں ، آپ اسے مندرجہ ذیل ایس کیو ایل کے ساتھ تبدیل کرسکتے ہیں:

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

مثال

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

تاہم ، تمام ٹیبل فائلوں کو دوبارہ نہ لکھنے کے لئے محتاط رہیں ، کیونکہ اگر بہت زیادہ ریکارڈ موجود ہیں تو اس میں کافی وقت لگے گا۔