Dalam pengelolaan database, kadang kita ingin memberikan akses terbatas kepada user tertentu. Misalnya, kita ingin user hanya bisa melihat hasil dari sebuah view tanpa bisa mengakses langsung tabel-tabel sensitif di balik view tersebut. Di MySQL, hal ini dapat dicapai dengan menggunakan SQL SECURITY DEFINER.
Apa itu SQL SECURITY DEFINER?
SQL SECURITY DEFINER adalah opsi saat membuat view atau prosedur di MySQL yang menentukan bahwa hak akses saat menjalankan objek tersebut (view, function, procedure) mengikuti hak akses dari user pembuat (definer), bukan user yang menjalankannya.
Ini sangat berguna untuk kasus:
- Ingin memberi akses ke view tapi menyembunyikan tabel sumber.
- Menjaga struktur internal database tetap privat.
Studi Kasus
Misalnya kita memiliki database `finance_db` dengan tabel `transactions` yang menyimpan semua data transaksi keuangan, dan kita ingin membuat view `vw_summary_public` agar user `u_financeviewer` bisa melihat data agregat saja.
1. Buat View dengan SQL SECURITY DEFINER
CREATE OR REPLACE SQL SECURITY DEFINER VIEW finance_db.vw_summary_public AS SELECT department, SUM(amount) AS total_amount, COUNT(*) AS total_transactions FROM finance_db.transactions WHERE status = 'approved' GROUP BY department;
Catatan: View ini akan dijalankan dengan hak akses pembuatnya, bukan user pemanggil.
2. Berikan Hak Akses ke View Saja
GRANT SELECT ON finance_db.vw_summary_public TO 'u_financeviewer'@'localhost';
3. Jangan Berikan Hak Akses ke Tabel Sumber
REVOKE ALL PRIVILEGES ON finance_db.transactions FROM 'u_financeviewer'@'localhost';
4. Uji Akses
Sebagai user `u_financeviewer`, hanya query berikut yang boleh berhasil:
SELECT * FROM finance_db.vw_summary_public; -- Harus berhasil SELECT * FROM finance_db.transactions; -- Harus ditolak
Kesimpulan
Dengan menggunakan SQL SECURITY DEFINER, kita bisa mengontrol akses user hanya sebatas view yang kita tentukan, tanpa membuka akses ke tabel sumbernya. Ini adalah pendekatan yang aman dan efisien dalam membagikan data terpilih kepada user yang tidak sepenuhnya dipercaya untuk melihat seluruh struktur database.