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
DEFINERsaat ini pengguna jika sesuai; atau, - Tentukan
DEFINERyang berbeda pengguna saat mendefinisikan program atau tampilan yang disimpan... Anda dapat melakukan ini selama Anda (orang yang membuat objek) memilikiSUPERhak istimewa, dan pengguna yang memanggil (mengakses) objek untuk sementara akan memiliki hakDEFINERtersebut pengguna sebagai gantinya; atau, - Tambahkan
SQL SECURITY INVOKERke 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; .