Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich beim Importieren von SQL-Funktionen in phpMyAdmin die Fehlermeldung „Zugriff verweigert; für diesen Vorgang benötigen Sie die Berechtigung SUPER'?
Fehler: Zugriff verweigert; Für diesen Vorgang benötigen Sie die SUPER-Berechtigung
Beim Versuch, SQL-Funktionen in phpMyAdmin zu importieren, wird möglicherweise die Fehlermeldung angezeigt: „#1227 – Zugriff verweigert; Sie benötigen für diesen Vorgang die SUPER-Berechtigung.“ Dieser Fehler kann frustrierend sein, aber die Lösung ist relativ einfach.
Das SUPER-Privileg verstehen
In MySQL ist das SUPER-Privileg eine spezielle Berechtigungsstufe, die Benutzern das gewährt Fähigkeit, erweiterte Vorgänge auszuführen, einschließlich der Erstellung und Änderung gespeicherter Routinen. Standardmäßig verfügen Standardbenutzer nicht über das SUPER-Privileg.
Entfernen der DEFINER-Anweisung
In Ihrem Fall entsteht das Problem durch die Einbeziehung der DEFINER-Anweisung in die SQL-Abfrage. Die DEFINER-Anweisung gibt den Benutzer an, der Eigentümer der erstellten Funktion sein wird. Wenn der angegebene Benutzer nicht über die SUPER-Berechtigung verfügt, schlägt die Abfrage fehl.
Um dieses Problem zu beheben, entfernen Sie die DEFINER-Anweisung aus der SQL-Abfrage, bevor Sie sie in phpMyAdmin importieren. Dadurch kann die Funktion erstellt werden, ohne dass das SUPER-Privileg erforderlich ist.
Festlegen des Trennzeichens
Zusätzlich ist es wichtig, das Trennzeichenfeld unter dem SQL-Text festzulegen Feld in phpMyAdmin. Dieses Feld gibt das Zeichen an, das zum Trennen von SQL-Anweisungen verwendet wird. Standardmäßig wird das Semikolon (;) als Trennzeichen verwendet. Wenn Ihre Abfrage jedoch Semikolons in der Funktionsdefinition enthält, müssen Sie ein anderes Trennzeichen auswählen.
Beispielabfrage ohne DEFINER-Anweisung
Hier ist ein Beispiel der 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 */;;
Sobald Sie die DEFINER-Anweisung entfernt und das richtige Trennzeichen festgelegt haben, sollten Sie in der Lage sein, die SQL-Abfrage zu importieren in phpMyAdmin erfolgreich eingegeben, ohne dass der Fehler „Zugriff verweigert“ aufgetreten ist.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Importieren von SQL-Funktionen in phpMyAdmin die Fehlermeldung „Zugriff verweigert; für diesen Vorgang benötigen Sie die Berechtigung SUPER'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!