PT. Neuronworks Indonesia

2023-04-26 03:45:01, Arya,


Enkripsi Database Mysql, Postgresql, dan Oracle


Keamanan data adalah hal yang terpenting agar terciptanya suatu sistem yang baik. Enkripsi database merupakan proses mengubah data dalam sebuah database menjadi bentuk yang tidak dapat dibaca oleh orang yang tidak berwenang. Tujuan dari enkripsi database adalah untuk meningkatkan keamanan dan privasi data dalam database tersebut.? Dengan database yang dienkripsi isi dari data tidak bisa sembarangan dilihat oleh orang yang tidak berwenang. Hal ini penting untuk melindungi data-data sensitif seperti nomor identitas user yang tidak sembarangan orang dapat melihatnya.

Enkripsi dilakukan pada tabel level kolom, sehingga orang yang ingin melihat isi dari kolom database tersebut harus didekripsikan terlebih dahulu dengan key bersifat rahasia, Sehingga orang yang tidak memiliki key tersebut tidak dapat mendekripsi kolom tersebut.

Pada artikel ini akan membahas cara enkripsi database pada database MySql, Postgresql, dan Oracle ketiga database tersebut sering digunakan oleh developer termasuk di neuronworks. Masing-masing memiliki cara sendiri untuk enkripsi database, cara enkripsi database pada ketiga database itu sendiri diantaranya :

1. Enkripsi MySql

Enkripsi pada MySql tidak mendukung enkripsi natif, yaitu enkripsi dilakukan langsung pada tabel. Sebagai gantinya Mysql menggunakan fungsi-fungsi enkripsi seperti tabel dibawah ini.

 
Link Source : https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html?

Disini kita menggunakan fungsi AES_ENCRYPT() untuk enkripsi dan AES_DECRYPT untuk dekripsi. Enkripsi dilakukan pada saat insert data sedangkan dekripsi dilakukan pada saat select data. Kolom yang akan dilakukan enkripsi harus bertipe data Varbinary atau Blob. Berikut adalah contoh sintaks penggunaan enkripsi dan dekripsi:

 

Contoh enkripsi pada saat insert database:

INSERT INTO user (user_name, no_ktp)?

VALUES ('arya', AES_ENCRYPT('{KEY}', '{VALUE dari no_ktp}'));

 

Contoh enkripsi pada saat select database:

SELECT user_name,? AES_DECRYPT('{KEY}', no_ktp) FROM user ?
WHERE user_name = 'arya';

 

Kelebihan menggunakan enkripsi dekripsi MySql yaitu :

  • Enkripsi dapat membantu meningkatkan keamanan data dalam database MySQL dengan mengubah data asli menjadi bentuk yang tidak dapat dibaca oleh orang yang tidak berwenang;?
  • Enkripsi dapat digunakan untuk melindungi privasi data sensitif;?
  • Meminimalisir risiko kehilangan data. Bahkan jika data dicuri atau hilang, data tersebut tidak dapat dimanfaatkan oleh orang yang tidak berwenang karena harus di-dekripsi terlebih dahulu;?
  • Penggunaan enkripsi dapat memberikan kepercayaan kepada pengguna database bahwa data mereka aman dan dilindungi dengan baik.

            Kekurangan menggunakan enkripsi dekripsi MySql yaitu :

  • Semua kode pada program harus diubah untuk menambahkan fungsi encrypt / decrypt di saat query ke db;?
  • Key harus di manage di sisi aplikasi, sehingga harus memastikan penyimpanan key aman;?
  • Tetap selektif saat menampilkan hasil query ke layar karena hasil query sudah dalam keadaan terdekripsi; ?
  • Jika hasil query ingin dikirim ke sistem lain harus di enkripsi lagi secara manual jika ingin aman; ?
  • Kolom yang akan di enkripsi harus bertipe data VARBINARY atau BLOB untuk mendukung  AES_ENCRYPT.


2. Enkripsi Postgresql

Berbeda dengan MySQL yang enkripsi dilakukan di level kolom saja,? PostrgreSQL menggunakan  pgsodium  untuk enkripsi di level kolom dan level tabel. Enkripsi di level tabel, hanya dilakukan sekali pada saat selesai membuat tabel. Namun, pgsodium itu sendiri hanya support di PostrgreSQL v.14, sedangkan versi di bawah itu belum support.

 

Cara enkripsi dengan pgsodium adalah sebagai berikut

  1. Pastikan anda telah menginstall ekstensi pgsodium di database postgre anda dengan cara

SELECT * FROM pg_available_extensions; -- (atau)
SHOW shared_preload_libraires;

 

  1. Buat tabel postgre seperti biasa dengan kolom yang bersifat secret.
  2. Terapkan enkripsi pada kolom yang bersifat secret tersebut dengan cara :

SECURITY LABEL FOR pgsodium ON COLUMN kolom_secret IS 'ENCRYPT WITH KEY ID {KEY}';?

  1. Setelah itu pada saat insert data seperti biasa kolom yang bersifat secret akan otomatis dienkripsi. Sedangkan cara untuk dekripsinya pada saat select adalah dengan cara menambahkan prefix decypted_ terhadap kolom yang secret sebagai berikut:

SELECT name, decrypted_noktp AS notkp FROM private.decrypted_customer

           

            Kelebihan dari enkripsi dekripsi postgresql :

  • Enkripsi langsung dilakukan di level tabel
  • Tidak perlu menggunakan fungsi encrypt pada statement INSERT, sehingga tidak perlu merubah kode pada aplikasi
  • Semua tipe data support untuk encryption

            Kekurangan dari enkripsi dekripsi postgresql :

  • Jika KEY nya ketahuan, maka kita perlu mengupdate semua data di kolom tersebut untuk mengubah KEY tersebut;?
  • Perlu perubahan dari sisi code untuk mendecrypt kolom dari sisi tabel?
  • Perlu migrasi database untuk database existing yang akan diterapkan encryption
     

3. Enkripsi Oracle

Oracle Database menyediakan berbagai pilihan untuk melakukan enkripsi data dalam database. Salah satu pilihan enkripsi yang tersedia, diantaranya Transparent Data Encryption (TDE), yang menyediakan enkripsi pada level kolom, tabel, atau tablespace secara otomatis tanpa perlu mengubah aplikasi atau kode program. TDE menggunakan algoritma enkripsi yang kuat seperti AES dan Triple DES. Namun, TDE Encryption tidak bisa diimplementasikan pada kolom foreign-key. Untuk bisa melakukan Encrypt TDE anda membutuhkan Oracle Wallet untuk create key..

Oracle Wallet adalah sebuah mekanisme keamanan yang digunakan di Oracle Database untuk menyimpan dan mengelola kunci privat, dan kunci publik yang digunakan dalam enkripsi data. Oracle Wallet menyediakan lingkungan keamanan yang aman untuk menyimpan informasi keamanan yang sensitif. Untuk bisa melakukan Encrypt, sebelumnya harus store-key terlebih dahulu ke Oracle Wallet-key, sebagai bentuk authentikasi untuk mengakses data, apakah bisa di-encrypt / decrypt.

 

Untuk enkripsi cukup dengan menambahkan ` ENCYPT ` pada kolom bersifat secret pada saat membuat tabel seperti:

CREATE TABLE employee (?
     first_name VARCHAR2(128),?
     last_name VARCHAR2(128),?
     empID NUMBER,?
     salary NUMBER(6) ENCRYPT);

 

Maka setiap data yang di insert otomatis terenkripsi, dan pada saat select otomatis didekripsikan oleh sistem untuk orang yang berwenang.