Duplicate entry

Copy-pasting from Stack Overflow is like cooking with a recipe book. You may end up with a decent meal, but you'll never truly master the art of programming.

Archive for the 'MySQL Sejuta Umat' Category

SQL SECURITY DEFINER INVOKER MYSQL

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.

posted by ismail okta kurniawan in MySQL Sejuta Umat and have No Comments

deterministic pada function/procedure mysql

Keyword “deterministic” pada function/procedure MySQL digunakan untuk memberitahu MySQL bahwa fungsi/prosedur tersebut selalu mengembalikan nilai yang sama ketika diberikan argumen yang sama.

Dalam MySQL, secara default, jika sebuah fungsi/prosedur tidak diberi tahu apakah deterministik atau tidak, maka MySQL menganggap fungsi/prosedur tersebut tidak deterministik. Artinya, jika fungsi/prosedur dipanggil beberapa kali dengan argumen yang sama, MySQL dapat mengembalikan hasil yang berbeda-beda.

Namun, jika sebuah fungsi/prosedur diberi tahu sebagai deterministik, MySQL akan menyimpan hasil yang dihasilkan oleh fungsi/prosedur untuk penggunaan lebih lanjut. Dengan demikian, jika fungsi/prosedur dipanggil beberapa kali dengan argumen yang sama, MySQL akan selalu mengembalikan nilai yang sama.

Penggunaan “deterministic” dapat membantu mempercepat kinerja database karena MySQL dapat menyimpan hasil yang dihasilkan oleh fungsi/prosedur untuk penggunaan lebih lanjut. Namun, perlu diingat bahwa penggunaan “deterministic” harus diperhitungkan dengan baik, terutama jika fungsi/prosedur menghasilkan output yang kompleks, karena dapat memakan waktu dan memori yang signifikan.

contoh :

CREATE PROCEDURE example_proc(IN num INT)
DETERMINISTIC
NO SQL
BEGIN
    DECLARE result INT;
    SET result = num * 2;
    SELECT result;
END;

Dalam contoh di atas, stored procedure example_proc didefinisikan dengan atribut DETERMINISTIC dan NO SQL. Stored procedure ini memiliki satu parameter num yang digunakan untuk menghitung hasil dari num * 2.

Atribut DETERMINISTIC menunjukkan bahwa stored procedure ini menghasilkan hasil yang sama untuk input yang sama setiap saat. Ini berarti, jika Anda memasukkan nilai yang sama untuk num, stored procedure akan selalu menghasilkan hasil yang sama.

Atribut NO SQL menunjukkan bahwa stored procedure ini tidak menggunakan perintah SQL dalam tubuhnya. Ini berarti bahwa stored procedure ini hanya menggunakan logika dan operasi dasar, dan tidak melakukan modifikasi pada database MySQL.

Kombinasi atribut DETERMINISTIC dan NO SQL berguna dalam situasi di mana kita ingin mengeksekusi operasi atau kalkulasi sederhana di dalam stored procedure, tanpa perlu mengakses atau memodifikasi data dalam database. Atribut ini juga dapat berguna dalam mempercepat eksekusi stored procedure karena database tidak perlu memeriksa perubahan data pada waktu eksekusi.

posted by ismail okta kurniawan in MySQL Sejuta Umat and have No Comments
Skip to toolbar