首页 >数据库 >mysql教程 >为什么在将 SQL 函数导入 phpMyAdmin 时出现'访问被拒绝;此操作需要 SUPER 权限”错误?

为什么在将 SQL 函数导入 phpMyAdmin 时出现'访问被拒绝;此操作需要 SUPER 权限”错误?

Patricia Arquette
Patricia Arquette原创
2024-11-02 14:53:30313浏览

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 语句并设置正确的分隔符后,您应该能够导入 SQL 查询成功进入 phpMyAdmin,没有遇到拒绝访问错误。

以上是为什么在将 SQL 函数导入 phpMyAdmin 时出现'访问被拒绝;此操作需要 SUPER 权限”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn