20/01/2019
# Tentang Prefix Tabel Database
Dari berbagai database yang saya temui, baik dari client, aplikasi gratis, maupun berbayar, banyak yang menggunakan prefix pada tabel database, baik tbl_, tb_, t_, dll
Namun apakah ini diperlukan?
Berikut penjelasannya...
Setidaknya ada tiga alasan kenapa tabel diberi prefix, yaitu:
# # 1. Membedakan tabel dengan view
Tabel diberi prefix tbl_ dan view diberi prefix v_, ada juga yang memberi prefix prefix v_tbl_, mungkin karena tabel yang berubah menjadi view :D
Apakah ini diperlukan?
Menurut saya TIDAK.
Karena, jika tabel berubah menjadi view dan view berubah menjadi tabel maka akan sangat merepotkan karena kita tidak cukup hanya merename tabel? melainkan harus mengubah semua query yang kita tulis di setiap detail aplikasi, melelahkan…
Selain itu akan repot ketika membuat nama foreign key (FK), nama FK ini biasanya berisi nama tabel yang terhubung, misal ketika menghubungkan tabel produk dan tabel kategori, nama FK nya produk_kategori, bagaimana jika ada tambahan prefix? atau tabel berubah menjadi view?
# # 2. SQL Injection
Dengan memberi prefik acak pada tabel, maka akan sulit menebak nama tabel pada database, misal attacker ingin mencari tabel yang berisi data usernam dan password maka mungkin attacker akan menduga tabel tersebut adalah tabel user, dengan menambahkan prefix tertentu, attacker tidak dapat menemukan tabel tersebut.
Model ini termasuk dalam Security through obscurity (keamanan dalam ketidakjelasan), dengan mengaburkan nama tabel, (harapannya) akan membuat data menjadi lebih aman.
Anggapan ini keliru, karena dengan memiliki akses ke database, maka attacker dapat dengan mudah melihat seluruh nama tabel yang ada, yaitu dengan melihat data pada system-tables seperti INFORMATION_SCHEMA.TABLES (tergantung database yang digunakan) atau menjalankan perintah SHOW TABLES (pada MySQL), dan banyak script kiddies sederhana yang dapat melakukan hal itu.
Sehingga, pada model ini memberi prefix tabel hanya memberi sedikit sekali manfaat, tidak sebanding dengan kesulitan yang ditimbulkan.
# # 3. Satu Database Untuk Beberapa Aplikasi
Sebagai contoh kita memiliki dua buah blog, misal blog A dan blog B yang keduanya menggunakan database yang sama, misal database dbblog, agar data tidak bentrok, maka masing masing tabel blog kita beri prefix, misal blog A dengan prefix bloga_ dan blog B dengan prefix blogb_
Dengan memberi prefix pada tabel, maka pengambilan data tidak akan bentrok karena masing masing memiliki nama yang unik, misal blog A mengambil data konfigurasi blog pada tabel bloga_option, sedangkan blog B pada tabel blogb_option
Hal ini diperjelas ketika kita menginstall WordPress. Pada bagian prefix table terdapat keterangan
"If you want to run multiple WordPress installations in a single database, change this"
Contoh lain adalah pada paket hosting murah meriah dimana kita hanya diperbolehkan menggunakan satu database, maka dengan memeberi prefix pada tabel, kita dapat menggunakan database tersebut untuk banyak aplikasi.
Hal yang sama juga terjadi ketika kita menggunakan shared hosting (shared server), nama database pasti akan diberi prefix sesuai dengan username kita
Kenapa?
Karena pada shared hosting tersebut, satu server digunakan oleh banyak user, dimana masing masing user bisa membuat database sendiri, sehingga untuk menghindari bentrokan dan memastikan bahwa nama database unik, maka diberilah prefix database.
# Alasan Yang Tepat
Dari berbagai penjelasan diatas, mana alasan penggunaan prefix table yang paling tepat?
Alasan yang paling tepat adalah alasan nomor tiga karena jelas alasan nomor tiga lah yang paling masuk akal dan bermanfaat jika dibanding kedua alasan lainnya.
Dengan demikian, dapat disimpulkan bahwa prefix table jelas tidak diperlukan, kecuali kita ingin menggunakan database yang sama untuk beberapa aplikasi yang berbeda.
Namun demikian, jika aplikasi mengharuskan kita menggunakan prefix (seperti WordPress) maka gunakan prefix yang random, untuk sedikit meningkatkan keamanan.