首頁  >  文章  >  資料庫  >  為什麼在將 SQL 函數匯入 phpMyAdmin 時出現「存取被拒絕;此操作需要 SUPER 權限」錯誤?

為什麼在將 SQL 函數匯入 phpMyAdmin 時出現「存取被拒絕;此操作需要 SUPER 權限」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-11-02 14:53:30269瀏覽

Why do I get the

錯誤:存取被拒絕;您需要超級權限才能執行此操作

嘗試將SQL 函數匯入phpMyAdmin 時,您可能會遇到錯誤訊息:「#1227 - 存取被拒絕;您需要超級權限才能執行此操作。」這個錯誤可能會令人沮喪,但解決方案相對簡單。

了解SUPER 權限

在MySQL 中,SUPER 權限是一種特殊的權限級別,它授予用戶執行高級操作的能力,包括創建和修改存儲例程。預設情況下,標準使用者不具備 SUPER 權限。

刪除 DEFINER 語句

在您的情況下,問題是由於在SQL 查詢。 DEFINER 語句指定將擁有所建立函數的使用者。如果指定的使用者沒有 SUPER 權限,查詢將會失敗。

要解決此問題,請在將 SQL 查詢匯入 phpMyAdmin 之前從 SQL 查詢中刪除 DEFINER 語句。這將允許在不需要 SUPER 權限的情況下建立函數。

設定分隔符號

此外,必須在 SQL 文字下設定分隔符號欄位phpMyAdmin 中的方塊。此欄位指定用於分隔 SQL 語句的字元。預設情況下,分號 (;) 用作分隔符,但如果您的查詢在函數定義中包含分號,則需要選擇不同的分隔符。

不帶DEFINER 語句的範例查詢

以下是不帶DEFINER 語句的SQL 查詢範例:

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

刪除DEFINER 語句並設定DEFINER正確的分隔符號後,您應該可以匯入SQL 查詢成功進入phpMyAdmin,沒有遇到拒絕存取錯誤。

以上是為什麼在將 SQL 函數匯入 phpMyAdmin 時出現「存取被拒絕;此操作需要 SUPER 權限」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn