MySQL Tablolarında Saydam Şifrelemeyi (TDE) Zorunlu Kılma (Windows sürümü)

Sayfa güncel :
Sayfa oluşturma tarihi :

Çalışma ortamı

MySQL (İngilizce)
  • MySQL 8.0 Topluluk Sürümü
Windows
  • pencereler 11

Önkoşullar

MySQL (İngilizce)
  • MySQL 8.0 Topluluk Sürümü
  • MySQL 8.0 Kurumsal Sürüm
Windows
  • pencereler 11
  • pencereler 10
Windows Sunucusu
  • Windows Sunucusu 2022
  • Windows Sunucusu 2019
  • Windows Sunucusu 2016
  • Windows Server 2012 R2

önkoşul

  • MySQL için bir veritabanı kurulur.

Şeffaf Şifreleme Hakkında

Kurumsal Şeffaf Veri Şifreleme, adından da anlaşılacağı gibi, olmayan her şeyden daha güvenli olan bir şifreleme teknolojisidir. Normalde, şifreleme yaparken, şifreleme ve şifre çözme işleminin gerçekleştirilmesi gerektiğinden, genellikle uygulayıcı üzerinde bir yüktür. Bu "şeffaf" isminin anlamı, uygulayıcı süreçte herhangi bir değişiklik yapmadan şifrelenebilmesidir. Bu nedenle, başlangıçta ayarlarda birkaç değişiklik yaparsanız, geri kalanı izinsiz olarak şifrelenir, bu nedenle çok etkili bir güvenlik önlemidir.

Ancak, "hiçbir şeyi değiştirmeye gerek yok" ifadesinden de anlaşılacağı gibi, veritabanına gerçekten giriş yaparsanız, verileri normal bir şekilde görebilirsiniz ve programdan veritabanı kaydını alırsanız, verileri normal bir şekilde görebilirsiniz. Elde edilen veriler şifrelenirse, işlemi değiştirmek gerekecektir, bu nedenle "İşlemi değiştirmeye gerek yok" ifadesiyle eşleşmeyecektir.

Daha sonra, MySQL'de tam olarak şeffaf şifreleme nedir şifrelenir, "depolanan veritabanı dosyaları" veya "tablo dosyaları" şifrelemeye tabidir. Daha sonra kontrol edeceğimiz gibi, dosyayı doğrudan açsanız bile, yalnızca içeriği görememeniz için şifreler, bu nedenle gerçek işlemde veritabanına giriş yapmaması için çalıştırılması gerekir.

Normal bir tablo oluşturun ve içeriğini kontrol edin

Öncelikle normal bir tablo ve kayıtlar oluşturalım. İstediğiniz gibi oluşturabilirsiniz, ancak bu durumda Workbench'te SQL çalıştırarak oluşturacağız. Bu durumda, tablo için saydam şifreleme ayarlamayı planlıyoruz, bu nedenle veritabanını normal şekilde oluşturacağız.

CREATE DATABASE `test_database`

Tablo da normal olarak yapılır. Sütunun içeriği herhangi bir şey olabilir.

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;

Ayrıca şifrelemeyi kontrol etmek için rastgele bir kayıt koyacağım.

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

Bir veritabanı veya tablo oluşturduğunuzda, varsayılan olarak aşağıdaki klasörde oluşturulur.

  • C: \ ProgramData \ MySQL \ MySQL Server 8.0 \ Veri

ProgramData Klasör gizlidir, bu nedenle Explorer ayarlarında görünür hale getirin.

Klasörde oluşturduğunuz veritabanının adını taşıyan bir klasör var, bu yüzden açın.

İçinde tablo tablo bir dosya var.

Bu dosyayı Not Defteri gibi bir metin düzenleyicisinde açın. İkili bir dosya olduğu için, temelde iyi anlamadığım bir metin satırı olduğunu düşünüyorum. En alta bakarsanız, kayıtlı kaydın metnini göreceksiniz.

Bu şekilde şifrelenmezse, dosya doğrudan açılsa bile kaydın içeriği bilinecektir. İçinde ne olduğunu bilmek için veritabanına giriş yapmanız gerekmez.

Saydam Şifreleme Ayarlarını Yapılandırma

Saydam şifrelemeyi etkinleştirmek için bir eklenti yüklemeniz gerekir. İlk olarak, eklentinin komuta dahil edilip edilmediğini kontrol edin.

Başlat menüsünden "MySQL 8.0 Komut Satırı İstemcisi" ni seçerek başlatın.

Şifrenizi girdikten ve giriş yaptıktan sonra aşağıdaki komutu girin:

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

Henüz yüklemediğiniz için boş olmalıdır.

Şimdi eklentiyi kuralım. İlk olarak, aşağıdaki klasörleri oluşturun: Aslında, onu nerede oluşturduğunuz veya hangi isim olduğu önemli değil. Anahtar dosyasını daha sonra kaydetmek istediğiniz konum olarak belirtin.

  • C:\ProgramData\MySQL\mysql-anahtarlık

Ardından, aşağıdaki dosyayı bir metin düzenleyicisinde açın:

  • C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

Alttaki boş alana aşağıdaki metni ekleyin ve kaydedin. Yönetici ayrıcalıklarıyla kaydedemiyorsanız, başka bir konuma kaydedebilir ve ardından dosyanın üzerine yazabilirsiniz.

early-plugin-load=keyring_file.dll
keyring_file_data=C:\ProgramData\MySQL\mysql-keyring\keyring

MySQL hizmetini yeniden başlatın. Ayrıca komutuyla yeniden başlatabilirsiniz.

Yeniden başlattığınızda, dosya belirtilen klasörde otomatik olarak oluşturulur.

Check in-in plug-in komutunu yeniden çalıştırarak eklentinin yüklendiğini doğrulayabilirsiniz.

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

Şifreli Tablo Oluşturma

Şimdi şifreli bir tablo oluşturalım. Bir öncekine benzer bir tablo oluşturun, ancak bu sefer seçeneklere ENCRYPTION='Y' ekleyin. Bu şifreleme ayarı şu anda GUI'de mümkün görünmüyor, bu nedenle bir komutla ayarlanması gerekiyor.

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;

Bu arada, eklenti yapılandırılmadan önce, şifreli bir tablo oluşturmaya çalışsanız bile, aşağıdaki hata görüntülenecektir.

Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.
キーリングからマスターキーが見つかりません。キーリングが正常にロードされ、初期化されているかどうかをサーバーログで確認してください。

Herhangi bir veriniz yoksa, şifreli olup olmadığını bilmiyorsunuz, bu yüzden aynı verileri koymaya çalışacağım.

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 Tablo dosyası oluşturulduğuna göre, içeriği kontrol edelim.

Dosya şifrelenmiştir ve kaydın içeriği doğrulanamıyor.

Şimdilik, artık sadece sunucuya giriş yaparak ve doğrudan tablo dosyasını çalarak üçüncü bir tarafın içindeki kayıtları okuması konusunda endişelenmenize gerek yok. Uygulamayı değiştirmeye hiç gerek yok, bu yüzden kolay bir güvenlik ayarı olduğunu düşünüyorum.

Ancak, veritabanına giriş yaparsanız, verileri normal şekilde görebilirsiniz. Güvenlik seviyesini artırmak istiyorsanız, veritabanı giriş hesabını iyi yönetmeniz ve ayrı bir şifreleme mekanizması sunmanız gerekir.

Yol boyunca şifrelenmiş bir tabloya dönüştürün

Başlangıçta şifrelenmemiş bir tablo oluşturursanız, daha sonra şifrelenmiş bir tabloya dönüştürebilirsiniz. Bu durumda, aşağıdaki SQL ile dönüştürebilirsiniz:

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

örnek

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

Ancak, tüm tablo dosyaları yeniden yazıldığı için çok sayıda kayıt varsa bunun zaman alacağını lütfen unutmayın.