Ya, secara desain, kursor dapat berperilaku berbeda dari SELECT
yang sama query mungkin berperilaku jika dijalankan oleh pengguna yang memanggil prosedur.
Jika Anda tidak menentukan DEFINER
saat Anda membuat program tersimpan (proc, fungsi, pemicu, atau peristiwa) atau tampilan, maka objek tersebut, saat diakses, berjalan dengan hak istimewa pengguna yang awalnya mendefinisikannya, bukan pengguna yang memanggilnya.
Anda memiliki tiga opsi, di sini:
- Verifikasi atau mungkin ubah izin
DEFINER
saat ini pengguna jika sesuai; atau, - Tentukan
DEFINER
yang berbeda pengguna saat mendefinisikan program atau tampilan yang disimpan... Anda dapat melakukan ini selama Anda (orang yang membuat objek) memilikiSUPER
hak istimewa, dan pengguna yang memanggil (mengakses) objek untuk sementara akan memiliki hakDEFINER
tersebut pengguna sebagai gantinya; atau, - Tambahkan
SQL SECURITY INVOKER
ke definisi prosedur, fungsi, dan tampilan (meskipun bukan pemicu atau peristiwa), menyebabkan objek berjalan dengan hak istimewa pengguna yang memanggilnya, bukan definisi, yang merupakan perilaku default.
Untuk melihat izin yang dimiliki oleh definer yang ada, misalnya jika Anda melihat DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Anda dapat menemukan definisi saat ini dalam definisi prosedur, dengan SHOW CREATE PROCEDURE procedure_name;
.