Ralat: Akses Ditolak; Anda Memerlukan Keistimewaan SUPER untuk Operasi Ini
Apabila cuba mengimport fungsi SQL ke dalam phpMyAdmin, anda mungkin menghadapi mesej ralat: "#1227 - Akses ditolak; anda memerlukan keistimewaan SUPER untuk operasi ini." Ralat ini boleh mengecewakan, tetapi penyelesaiannya agak mudah.
Memahami Keistimewaan SUPER
Dalam MySQL, keistimewaan SUPER ialah tahap kebenaran khas yang memberikan pengguna keupayaan untuk melaksanakan operasi lanjutan, termasuk mencipta dan mengubah suai rutin yang disimpan. Secara lalai, pengguna standard tidak memiliki keistimewaan SUPER.
Mengalih keluar Penyata DEFINER
Dalam kes anda, masalah timbul daripada kemasukan pernyataan DEFINER dalam Pertanyaan SQL. Pernyataan DEFINER menentukan pengguna yang akan memiliki fungsi yang dicipta. Jika pengguna yang dinyatakan tidak mempunyai keistimewaan SUPER, pertanyaan akan gagal.
Untuk menyelesaikan isu ini, alih keluar pernyataan DEFINER daripada pertanyaan SQL sebelum mengimportnya ke dalam phpMyAdmin. Ini akan membolehkan fungsi dicipta tanpa memerlukan keistimewaan SUPER.
Menetapkan Pembatas
Selain itu, adalah penting untuk menetapkan medan pembatas di bawah teks SQL kotak dalam phpMyAdmin. Medan ini menentukan aksara yang akan digunakan untuk memisahkan pernyataan SQL. Secara lalai, koma bernoktah (;) digunakan sebagai pembatas, tetapi jika pertanyaan anda termasuk koma bernoktah dalam definisi fungsi, anda perlu memilih pembatas yang berbeza.
Contoh Pertanyaan tanpa Penyata DEFINER
Berikut ialah contoh pertanyaan SQL tanpa DEFINER pernyataan:
/*!50003 DROP FUNCTION IF EXISTS `f_calc_gst` */;; /*!50003 SET SESSION SQL_MODE=""*/;; /*!50003 CREATE*/ /*!50003 FUNCTION `f_calc_gst`(p_ht decimal(15,3), p_province varchar(2)) RETURNS varchar(255) CHARSET utf8 begin declare res varchar(255); declare v_gst decimal(15,3); declare v_gst_formula varchar(255); select GST, GST_formula into v_gst, v_gst_formula from taxes_periods where NOW() between dt_debut and dt_fin and id_province = p_province; set v_gst_formula = replace(v_gst_formula, 'HT$', p_ht); set v_gst_formula = replace(v_gst_formula, 'GST%', v_gst); set res = concat('select round(', v_gst_formula, ',2) "gst"'); return res; end */;;
Setelah anda mengalih keluar pernyataan DEFINER dan menetapkan pembatas yang betul, anda seharusnya boleh mengimport pertanyaan SQL ke dalam phpMyAdmin dengan jayanya tanpa menghadapi ralat akses dinafikan.
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \'Akses ditolak; anda memerlukan keistimewaan SUPER untuk operasi ini\' semasa mengimport fungsi SQL ke dalam phpMyAdmin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!