اجرای رمزگذاری شفاف (TDE) در جداول خروجی زیر (نسخه ویندوز)

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط عملیاتی

Mysql
  • خروجی زیر 8.0 جامعه نسخه
ویندوز
  • ویندوز 11

پیش نیازها

Mysql
  • خروجی زیر 8.0 جامعه نسخه
  • خروجی زیر 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');

هنگامی که یک پایگاه داده یا جدول ایجاد می کنید، به طور پیش فرض در پوشه زیر ایجاد می شود.

  • C: \ ProgramData \ MySQL \ MySQL سرور 8.0 \ داده ها

ProgramData پوشه پنهان است، بنابراین ان را در تنظیمات Explorer قابل مشاهده کنید.

یک پوشه با نام پایگاه داده ای که در پوشه ایجاد کرده اید وجود دارد، بنابراین ان را باز کنید.

در داخل یک فایل جدول به جدول وجود دارد.

این فایل را در یک ویرایشگر متن مانند Notepad باز کنید. از انجا که این یک فایل باینری است، من فکر می کنم که اساسا یک خط متن وجود دارد که من به خوبی درک نمی کنم. اگر به پایین نگاه کنید، متن رکورد ثبت شده را خواهید دید.

اگر به این روش رمزگذاری نشود، محتویات رکورد حتی اگر فایل به طور مستقیم باز شود، شناخته خواهد شد. شما مجبور نیستید به پایگاه داده وارد شوید تا بدانید چه چیزی در داخل است.

پیکربندی تنظیمات رمزگذاری شفاف

برای فعال کردن رمزگذاری شفاف، باید یک افزونه نصب کنید. ابتدا بررسی کنید که ایا پلاگین با دستور همراه است.

با انتخاب "MySQL 8.0 Command Line Client" از منوی Start شروع کنید.

پس از وارد کردن رمز عبور و ورود به سیستم، فرمان زیر را وارد کنید:

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' اضافه کنید. این تنظیم رمزگذاری به نظر نمی رسد در GUI در این زمان امکان پذیر باشد، بنابراین باید با یک فرمان تنظیم شود.

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

با این حال، لطفا توجه داشته باشید که اگر سوابق زیادی وجود داشته باشد، زمان می برد زیرا تمام فایل های جدول بازنویسی می شوند.