Crear funciones en phpMyAdmin – Error: acceso denegado, necesita el súper privilegio para esta operación

Importé una base de datos MySQL. Todas las tablas se importaron con éxito, pero no las funciones. La única forma en que puedo ejecutar consultas SQL es a través de phpMyAdmin o con un script PHP (sin SSH).

Aquí hay un ejemplo de las funciones para importar:

DELIMITER ;; /*!50003 DROP FUNCTION IF EXISTS `f_calc_gst` */;; /*!50003 SET SESSION SQL_MODE=""*/;; /*!50003 CREATE*/ /*!50020 DEFINER=`journal`@`%`*/ /*!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 */;; 

Si pego este código en phpMyAdmin obtengo este error: # 1227 – Acceso denegado; necesita el SUPER privilegio para esta operación

Traté de eliminar el “/ ! 50003″ y el “ /” para descomentar el SQL, pero recibo el mismo mensaje de error.

También traté de no usar ningún delimitador y eliminar “DELIMITER ;;” y obtuve este error:

 DROP FUNCTION IF EXISTS f_calc_gst SET SESSION SQL_MODE = "" CREATE DEFINER = `journal`@`%` FUNCTION `f_calc_gst` ( p_ht DECIMAL( 15, 3 ) , p_province VARCHAR( 2 ) ) RETURNS VARCHAR( 255 ) CHARSET utf8 BEGIN declare res VARCHAR( 255 ) ; #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET SESSION SQL_MODE="" CREATE DEFINER=`journal`@`%` FUNCTION `f_calc_gst`(p_ht ' at line 2 

También probado:

  CREATE DEFINER=`journal`@`%` 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// 

Resultando en :

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 

¿El problema está en SQL, phpMyAdmin o con el servidor?

El problema era que no tenía el privilegio especial, pero si eliminé el DEFINER de la consulta ya no necesito este privilegio.

A partir de MySQL 5.0.3, CREATE PROCEDURE y CREATE FUNCTION requieren el privilegio CREATE ROUTINE. También pueden requerir el privilegio SUPER, dependiendo del valor del DEFINER, como se describe más adelante en esta sección. Si el registro binario está habilitado, CREATE FUNCTION podría requerir el privilegio SUPER, como se describe en la Sección 18.6, “Registro binario de progtwigs almacenados”.

También tuvo que establecer el campo del delimitador en el cuadro de texto SQL. campo Delimitador phpMyAdmin

Aquí está la consulta SQL sin la statement DEFINER:

 /*!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 */;;