Prefix tabel, perlukah?
Dari berbagai database yang saya temui, hampir semua menggunakan prefix tbl_, tb_, atau t_, mulai dari aplikasi gratis yang bebas didownload hingga aplikasi berbayar. Sebenarnya apa maksud dari prefix ini dan apakah memang diperlukan?
Mari kita bahas lebih dalam…
Alasan Memberi Prefix Pada Tabel
Setidaknya ada tiga alasan mengapa menambahkan prefix pada tabel:
1. Membedakan Tabel Dengan View
Alasan pertama menambahkan prefix pada tabel adalah untuk mempermudah membedakan antara tabel dengan view, tabel diberi prefix tbl_ atau tb_ sedangkan view diberi prefik v_
Model seperti ini paling sering digunakan, entah karena latah atau memang benar-benar mengetahui alasan kenapa melakukan hal tersebut, bahkan ada yang memberi prefix v_tbl_, mungkin karena tabel yang berubah menjadi view
Apakah ini diperlukan?
Menurut saya TIDAK.
Kenapa? karena
- Bagaimana jika tabel berubah menjadi view dan view berubah menjadi tabel? apakah cukup merename tabel? tidak, kita harus mengubah semua query yang kita tulis di setiap detail aplikasi, melelahkan…
- Dengan aplikasi database managemen yang ada, seperti HeidiSQL, phpMyAdmin, MySQL Workbech, dll kita dapat sangat mudah membedakan mana view dan mana tabel.
- Mungkin ada yang beralasan, ketika menulis SQL akan langsung kelihatan bahwa yang kita gunakan dalam query adalah tabel atau view. Pada query select dan sering nya select, tidak masalah kita menggunakan view atau tabel, sedangkan pada statement Insert, Update, dan Delete, kita pasti sudah tahu bahwa yang akan kita ubah datanya adalah tabel buka view.
- Akan repot ketika menulis nama Foreign Key (FK). Nama FK ini biasanya mengacu pada nama tabel yang terhubung, misal ketika menghubungkan tabel produk dan kategori, nama FK adalah produk_kategori, bagaimana jika tabel menggunakan prefix? tb_produk_tb_ktegori, atau v_produk_tb_kategori? aneh…
- Tidak nyaman ketika melihat daftar tabel yang semuanya menggunakan prefix, seolah-olah semuanya adalah tabel yang sama.
2. Menghindari SQL Injection
Alasan kedua adalah menghindari SQL injection, misal dengan memberi prefix acak seperti m@i4_user
Dengan memberi prefik pada tabel, maka akan sulit menebak nama tabel pada database, misal attacker ingin mencari tabel yang berisi data username dan password maka mungkin attacker akan menduga tabel tersebut adalah tabel user, dengan menambahkan prefix tertentu, attacker tidak dapat menemukan tabel tersebut.
Hal ini diperkuat dengan berbagai CMS seperti wordpress yang menyediakan prefix pada tabel dan Framework Pemrograman seperti CI yang memfasilitasi penggunaan prefix.
Namun
Menurut Saya Tidak. Kenapa?
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 atau akses penuh ke file program Anda (terjadi baik perusahaan kecil maupun perusahaan besar), maka attacker dapat dengan mudah melihat seluruh database dan nama tabel yang ada, baik dengan mengetahui username dan password database atau dengan melihat data pada system-tables seperti INFORMATION_SCHEMA.TABLES (tergantung database yang digunakan), banyak juga script kiddies sederhana yang dapat melakukan hal itu.
Dengan demikian, perkuat security pada level akses database bukan dengan memberi prefix pada nama tabel.
Sehingga, pada model ini memberi prefix tabel hanya memberi sedikit sekali manfaat, tidak sebanding dengan kesulitan yang ditimbulkan.
3. Satu Database Untuk Beberapa Aplikasi
Alasan ketiga adalah prefix tabel digunakan jika satu database digunakan oleh lebih dari satu 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.“
Yang artinya jika Anda ingin menjalankan beberapa Instalasi WordPress dalam satu database, ubah nilai ini.
Contoh lain adalah pada paket hosting murah 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.
Demikian pembahasan tentang penggunaan prefix pada tabel database, semoga bermanfaat.
Subscibe Now
Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com
4 Feedback dari pembaca
Waw… sungguh mencerahkan
Sangat bermanfaat
iya memang memakai prefix untuk web app biasa sampai menengah itu bikin ribet. setiap pemanggilan harus ada tbl_, tbl_m_ atau apalah haha. thank u mas
Betul mas, bikin ribet
Sama sama mas