Bir mysql veritabanını şifrelemek için iyi bir yol nedir ve buna değer mi?


20

Bir veritabanının belirli alanlarını şifreleyebileceğimi biliyorum, ancak veritabanının her alanını şifrelemekle ilgileniyorum. Bir mysql kabuğuna erişen ancak şifre çözme anahtarına erişimi olmayan hiç kimsenin veritabanından hiçbir şey okuyamayacağından emin olmak istiyorum.

Ayrıca, birisinin makineye kök erişimi varsa, ancak bir şifre çözme anahtarı yoksa, verileri okuyamadıklarından emin olmak istiyorum.

Bunu nasıl yapmalıyım? Yapmak mantıklı mı? Birisi mysql veritabanına erişim kaçınılmaz olarak anahtar erişimi olacak, bu yüzden bu bir anlam ifade endişe duyuyorum. Bir şey mi kaçırıyorum?


5
DB'yi özel bir birimde depolamayı ve dm-crypt ve LUKS ile şifrelemeyi düşündünüz mü? Tabii, istediğin bu değil, ama her şey şifrelenecek. Anahtar dosyasını GPG ile bile şifreleyebilirsiniz.
dsljanus

Yanıtlar:


10

Alan düzeyinde minimum AES ve DES şifrelemesi mevcuttur: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Hiç kimse, her sorgu için anahtar belirtmeden (veya tetikleyicilere / yordamlara eklemeden) verileri okuyamaz.

misal:

INSERT:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

ve SEÇ:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

Ayrıca, veritabanına SSL bağlantısı gerektirir .

Ve daha düşük seviyede - dosya sistemini de şifreleyebilirsiniz.


2
Not: Veritabanı yerel değilse, bağlantıyı bir şekilde şifrelemeniz gerekir; aksi takdirde şifre ve anahtar ağ üzerinden düz metin olarak gönderilir. Bkz. Security.stackexchange.com/questions/45838/…
Aaron Digulla

AES, MD5 eskidir ve istismarları vardır. yeni şifreleme nedir?
YumYumYum

Bu sadece bir alanı şifrelemek / şifresini çözmek için bir örnek olduğunu biliyorum ama örnek olarak şifre kullanmak kötü bir fikir. Veritabanınızda şifrelemeli veya şifrelemesiz şifrelenmemiş parola olmamalıdır.
Caedmon

Bu cevap, alan düzeyinde şifre çözme ile ilgili, ancak soru bununla ilgili değil: "bir mysql veritabanını şifrelemek için iyi bir yol" ... "Bir veritabanının belirli alanlarını şifreleyebileceğimi biliyorum, ama her şeyi şifrelemekle ilgileniyorum veritabanı alanı. "
LarsH


2

İlk olarak, anahtarınızı uygulama ile birlikte saklar ve tüm şifrelemeyi uygulama katmanında işlersiniz.

Sonraki: MySQL örneğinin ve uygulamanın [sunucu] 'nun ayrı makinelerde olduğundan emin olursunuz, böylece MySQL sunucusundaki kök güvenliği saldırganın anahtarı uygulama kaynağından okumasına izin vermez.

Bu yaklaşım aşırı görünüyor. Hassas verileri (parolalar, kredi kartları vb.) Gerektiği gibi kullanın, ancak her şeyi şifrelemek aşırıya kaçıyor. (Ve birincil anahtarlar dünyasında muhtemelen karşı üretken)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.