Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen von Funktionen in phpMyAdmin - Fehler:Zugriff verweigert, Sie benötigen das Super-Privileg für diesen Vorgang

Das Problem war, dass ich das Super-Privileg nicht hatte, aber wenn ich den DEFINER aus der Abfrage entferne, brauche ich dieses Privileg nicht mehr.

Ab MySQL 5.0.3 erfordern CREATE PROCEDURE und CREATE FUNCTION das CREATE ROUTINE-Privileg. Abhängig vom DEFINER-Wert benötigen sie möglicherweise auch das SUPER-Privileg, wie weiter unten in diesem Abschnitt beschrieben. Wenn die binäre Protokollierung aktiviert ist, erfordert CREATE FUNCTION möglicherweise die SUPER-Berechtigung, wie in Abschnitt 18.6, „Binäre Protokollierung von StoredPrograms“ beschrieben.

Musste auch das Trennzeichenfeld unter dem SQL-Textfeld festlegen.

Hier ist die SQL-Abfrage ohne die DEFINER-Anweisung:

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