Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kolom terenkripsi MySQL

Saya tidak tahu apakah ada gunanya mengenkripsi data dengan hash kata sandi pengguna, terutama jika Anda menyimpan hash itu sendiri dalam database. Dalam hal ini siapa pun yang dapat mengakses data terenkripsi juga dapat mengakses hash kata sandi dan mendekripsi data.

Pendekatan lain adalah mengenkripsi data dengan kunci khusus aplikasi yang diasinkan dengan beberapa data khusus pengguna. Namun, Anda menghadapi masalah lain:cara menyimpan kunci aplikasi dengan aman. Untuk pertanyaan itu saya tidak tahu jawaban yang mudah, tetapi menyimpannya dalam kode sumber Anda mungkin cukup baik jika Anda takut data database Anda dapat dikompromikan, tetapi bukan kode sumber itu sendiri, mis. jika database Anda disimpan di luar situs (pikirkan Amazon S3).

Menggabungkan kunci aplikasi dengan kata sandi pengguna membantu jika Anda hanya menyimpan hash kata sandi di database, tetapi dapat menimbulkan kelemahan keamanan lain:Anda harus menyimpan kata sandi pengguna dalam teks yang jelas di sesi aplikasi.

Adapun solusi teknis, cukup sederhana dan kode contoh tersedia . Anda dapat memodifikasinya sebagai berikut untuk mengenkripsi data dengan kata sandi aplikasi yang diasinkan dengan hash kata sandi:

INSERT INTO secure_table VALUES (
  1,
  AES_ENCRYPT(
    'plain text data',
    CONCAT(@application_password, @user_password))
);

Bagaimanapun Anda harus menyimpan kata sandi aplikasi Anda di suatu tempat, jadi menurut saya tidak ada pendekatan mudah yang memberikan keamanan sempurna.

Pendekatan lain yang dapat saya pikirkan adalah meminta PIN singkat kepada pengguna yang dapat Anda gunakan sebagai kunci enkripsi. PIN tidak akan disimpan dalam database, tetapi Anda harus menanyakannya kepada pengguna setiap kali Anda mengakses data mereka.

Dan tentu saja yang harus Anda pikirkan adalah kelayakan enkripsinya. Anda tidak akan dapat mengindeks atau mencarinya tanpa dekripsi. Ini mungkin diperlukan untuk kumpulan data yang terbatas (misalnya nomor kartu kredit), tetapi saya tidak akan membahasnya terlalu jauh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bersyarat dalam MYSQL di mana klausa

  2. MYSQL REGEXP menelusuri dalam string JSON

  3. Apakah penyortiran InnoDB benar-benar lambat?

  4. Bagaimana cara menambahkan total sebagai baris terakhir di sql saya?

  5. Mengubah kolom Tabel Mysql menjadi peka huruf besar-kecil