SQL SECURITY
adalah salah satu opsi yang dapat digunakan dalam definisi stored procedure di MySQL untuk menentukan konteks keamanan di mana stored procedure akan dijalankan. Ada dua opsi yang tersedia dalam SQL SECURITY
, yaitu DEFINER
dan INVOKER
.
DEFINER
: Opsi ini mengeksekusi stored procedure dengan hak akses yang diberikan kepada pengguna yang membuat stored procedure tersebut (yaitu, definernya). Dalam konteks ini, stored procedure dijalankan dengan hak akses yang diberikan pada definernya, bukan hak akses pengguna yang memanggil stored procedure.INVOKER
: Opsi ini mengeksekusi stored procedure dengan hak akses yang diberikan kepada pengguna yang memanggil stored procedure tersebut. Dalam konteks ini, stored procedure dijalankan dengan hak akses yang dimiliki oleh pengguna yang memanggil stored procedure.
Perbedaan utama antara opsi DEFINER
dan INVOKER
adalah hak akses yang digunakan untuk mengeksekusi stored procedure. Dengan opsi DEFINER
, stored procedure dijalankan dengan hak akses yang diberikan pada definernya, sedangkan dengan opsi INVOKER
, stored procedure dijalankan dengan hak akses pengguna yang memanggil stored procedure.
Secara default, MySQL menggunakan opsi DEFINER
ketika sebuah stored procedure dibuat tanpa menyertakan opsi SQL SECURITY
. Namun, sangat penting untuk mempertimbangkan opsi SQL SECURITY
ketika membuat stored procedure, terutama jika stored procedure tersebut akan dijalankan dengan hak akses yang sensitif atau penting.
Dalam penggunaannya, opsi DEFINER
biasanya digunakan pada stored procedure yang berisi perintah SQL untuk mengubah struktur database atau mengakses data sensitif, sementara opsi INVOKER
biasanya digunakan pada stored procedure yang hanya digunakan untuk menjalankan operasi sederhana dan tidak memerlukan hak akses khusus.
CREATE PROCEDURE example_procedure (IN id INT)
SQL SECURITY INVOKER
BEGIN
SELECT * FROM users WHERE id = id;
END;
Dalam contoh di atas, stored procedure example_procedure
didefinisikan dengan opsi SQL SECURITY INVOKER
. Stored procedure ini memiliki satu parameter id
yang digunakan untuk memfilter hasil SELECT.
Ketika stored procedure ini dipanggil, ia akan dijalankan dengan hak akses pengguna yang memanggilnya. Dalam hal ini, pengguna yang memanggil stored procedure harus memiliki hak akses SELECT pada tabel users
untuk dapat mengeksekusi stored procedure ini.
Penting untuk dicatat bahwa pengguna yang memanggil stored procedure ini akan menggunakan hak akses dan izin yang dimilikinya, bukan hak akses definernya. Oleh karena itu, opsi SQL SECURITY INVOKER
sangat berguna untuk memastikan bahwa hak akses dan izin yang diterapkan pada stored procedure selalu sesuai dengan konteks pengguna yang memanggilnya.
Place your comment