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?
mysql
encryption
Snitse
sumber
sumber
Jawaban:
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:
dan SELECT:
Juga, ini memerlukan koneksi SSL ke database.
Dan pada level yang lebih rendah - Anda juga dapat mengenkripsi sistem file.
sumber
MariaDB baru-baru ini menambahkan enkripsi tingkat-tabel untuk tabel InnoDB dan XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL juga mendukung enkripsi level-tabel untuk InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
sumber
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)
sumber