Whats cara yang baik untuk mengenkripsi database mysql, dan apakah itu layak?

20

Saya tahu saya bisa mengenkripsi bidang tertentu dari basis data, tapi saya tertarik mengenkripsi setiap bidang basis data. Saya ingin memastikan tidak ada orang yang mendapatkan akses ke shell mysql tetapi yang tidak memiliki akses ke kunci dekripsi tidak dapat membaca apa pun dari database sama sekali.

Saya juga ingin memastikan bahwa jika seseorang mendapatkan akses root ke mesin, tetapi tidak memiliki kunci dekripsi, mereka tidak dapat membaca data.

Bagaimana saya harus melakukan ini? Apakah masuk akal untuk dilakukan? Saya khawatir jika seseorang memiliki akses ke database mysql mereka pasti akan memiliki akses ke kunci, jadi ini tidak masuk akal. Apakah saya melewatkan sesuatu?

Snitse
sumber
5
Sudahkah Anda mempertimbangkan untuk menyimpan DB pada volume khusus dan mengenkripsi dengan dm-crypt dan LUKS? Tentu, bukan itu yang Anda minta, tetapi semuanya akan dienkripsi. Anda bahkan dapat mengenkripsi keyfile dengan GPG.
dsljanus

Jawaban:

10

Enkripsi AES dan DES tingkat lapangan minimal tersedia: https://dev.mysql.com/doc/refman/5.5/id/encryption-functions.html#function_encrypt

Tidak seorang pun dapat membaca data tanpa menentukan kunci untuk setiap permintaan (atau tanpa menambahkannya ke pemicu / prosedur).

contoh:

MEMASUKKAN:

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

dan SELECT:

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

Juga, ini memerlukan koneksi SSL ke database.

Dan pada level yang lebih rendah - Anda juga dapat mengenkripsi sistem file.

GioMac
sumber
2
Catatan: Kecuali jika basis datanya lokal, Anda perlu mengenkripsi koneksi entah bagaimana atau kata sandi dan kunci akan dikirim sebagai teks biasa melalui jaringan. Lihat security.stackexchange.com/questions/45838/…
Aaron Digulla
AES, MD5 sudah tua dan memiliki eksploitasi. apa enkripsi baru?
YumYumYum
Saya tahu ini hanyalah contoh cara mengenkripsi / mendekripsi bidang tetapi menggunakan kata sandi sebagai contoh adalah ide yang buruk. Anda seharusnya tidak memiliki kata sandi yang tidak rusak di database Anda dengan atau tanpa enkripsi.
Caedmon
Jawaban ini adalah tentang dekripsi tingkat lapangan, namun pertanyaannya bukan tentang itu: "cara yang baik untuk mengenkripsi basis data mysql" ... "Saya tahu saya bisa mengenkripsi bidang tertentu dari basis data, tapi saya tertarik mengenkripsi setiap bidang basis data. "
LarsH
2

Pertama: Anda menyimpan kunci Anda dengan aplikasi dan menangani semua enkripsi pada lapisan aplikasi.

Berikutnya: Anda memastikan bahwa instance MySQL dan aplikasi [server] berada di mesin yang terpisah sehingga kompromi root pada server MySQL tidak memungkinkan penyerang membaca kunci dari sumber aplikasi.

Pendekatan ini sepertinya berlebihan. Tangani data sensitif dengan benar (kata sandi, kartu kredit, dll) tetapi mengenkripsi semuanya terlalu banyak. (Dan kemungkinan kontra produktif di dunia kunci primer)

Daniel Widrick
sumber