Cara memisahkan data sensitif dalam basis data (MySql)

9

Saya perlu merancang database yang akan berisi informasi tentang penyakit pribadi pengguna.

Apa yang bisa menjadi pendekatan untuk mengimplementasikan kolom dari tabel DB: mengenkripsi informasi, memisahkan data dalam dua perbedaan DB, satu untuk data sensitif dan satu lagi untuk data tidak sensitif, atau keduanya atau pendekatan lain?

carlo
sumber
1
Dari siapa Anda perlu melindungi data?
Oded
Pertanyaan bagus tetapi, mungkin ini harus dimigrasikan ke dba.stackexchange.com/questions ?
FrustratedWithFormsDesigner
@Daftar DBA seharusnya tidak dapat melihat informasi tentang penyakit pengguna database.
carlo
2
Tapi siapa yang tidak boleh ?
Oded
1
Anda dapat mengenkripsi di sisi aplikasi tetapi aplikasi akan memiliki kunci. Apakah ini aplikasi web yang "memasukkan" data?
Ominus

Jawaban:

5

Anda dapat mengenkripsi data dengan kunci yang disimpan dalam aplikasi web Anda sehingga data ditulis / dibaca dari db dalam bentuk terenkripsi. Namun siapa pun yang memiliki akses ke kode akan memiliki akses ke kunci dan dengan kunci data yang tidak terenkripsi. Ini memecahkan persyaratan

dba seharusnya tidak dapat melihat informasi tentang penyakit pengguna database.

Sejauh menggunakan untuk memisahkan database saya tidak berpikir itu diperlukan. Anda menyimpan data yang dienkripsi dan menggunakan izin basis data oleh pengguna, tabel (jika itu diperlukan) akan lebih dari cukup. Saya pikir DB ekstra menambah lapisan kompleksitas tanpa banyak hal lain. Kecuali jika berada di lokasi yang berbeda, maka mungkin ada peningkatan KECIL dari satu sistem basis data tunggal.

Ominus
sumber
1
Alasan lain untuk pangkalan data terpisah adalah persyaratan hukum atau kontrak bahwa data sensitif harus disimpan dalam yurisdiksi (bukan di cloud).
Gilbert Le Blanc
2

Jawaban Ominus menjawab pertanyaan pertama Anda. Jawaban untuk pertanyaan kedua mungkin memerlukan detail lebih lanjut tentang aplikasi Anda.

Pendekatan lain dengan keamanan yang lebih besar jika pasien harus mengakses database bisa dengan memiliki database terpisah untuk setiap pengguna. Dalam pendekatan ini, Anda mungkin menggunakan kerangka kerja yang menyediakan fungsionalitas multi-penyewa, multi-basis data. Namun masalahnya adalah jika Anda memiliki pengguna aplikasi yang terpisah dan pengguna basis data yang terpisah, menyinkronkan pengguna ini akan sangat sulit. Saya kira pasien tidak perlu mengakses database Anda. Jika mereka perlu melakukannya, mungkin paling aman untuk memiliki kunci per pengguna.

Selain persyaratan hukum atau kontrak, beberapa alasan lain yang dapat saya pikirkan untuk memiliki database terpisah adalah: persepsi pelanggan tentang keamanan yang meningkat membuat penjualan lebih mudah, kekhawatiran tentang enkripsi menjadi rusak, dan kekhawatiran tentang kunci yang dikompromikan.

Mengenai bagian dari jawaban Briddmus di mana ia menyatakan "bahwa Anda perlu mengenkripsi lebih dari sekadar informasi medis": ini hanya berlaku jika semua orang dalam database memiliki kondisi medis. (Saya kira ini masalahnya).

Catatan: bagian dari jawaban ini akan lebih cocok sebagai komentar tetapi saya belum memiliki perwakilan yang cukup untuk mengirim komentar di sini.

Daniel
sumber
1

Untuk jenis aplikasi ini, Anda perlu memikirkan siapa yang harus diizinkan mengakses data. Dengan informasi medis, saya pikir itu harus dibatasi untuk pengguna yang memasukkannya dan siapa pun yang mereka berikan izin untuk melihatnya.

Untuk mencegah DBA melihat data, Anda harus mengenkripsi data tersebut menggunakan kode yang tidak dapat diakses oleh DBA.

Anda juga perlu mengenkripsi informasi sedemikian rupa sehingga programmer aplikasi tidak dapat mengaksesnya juga. Tidak ada gunanya mengenkripsi informasi dari DBA jika seorang programmer dapat login sebagai pengguna mana pun.

Anda juga tidak ingin mengenkripsi semua data dengan kode yang sama. Perangkat lunak mungkin memiliki bug yang menunjukkan kepada satu pengguna informasi yang lain. Jadi mungkin akan lebih baik untuk mengenkripsi data setiap pengguna menggunakan kode khusus untuk pengguna itu.

Penting untuk dicatat bahwa Anda perlu mengenkripsi lebih dari sekedar informasi medis; sebagai pengguna akhir, saya tidak ingin DBA Anda tahu bahwa saya memiliki kondisi medis, apalagi apa itu. Jadi, Anda juga harus mengenkripsi informasi identitas pribadi tentang pengguna. Ini termasuk hal-hal seperti:

  • nama
  • tanggal lahir
  • alamat email
  • seks
  • alamat
pengantin
sumber