Creating functions in phpMyAdmin - Error: access denied you need the super privilege for this operation(在 phpMyAdmin 中创建函数 - 错误:访问被拒绝,此操作需要超级权限)
问题描述
我导入了一个 MySQL 数据库.成功导入的所有表,但不是函数.我可以执行 SQL 查询的唯一方法是通过 phpMyAdmin 或使用 PHP 脚本(无 SSH).
I imported a MySQL database. All the tables where successfully imported but not the functions. The only way I can execute SQL queries is through phpMyAdmin or with a PHP script (no SSH).
以下是要导入的函数的示例:
Here's an example of the functions to import:
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 */;;
如果我将此代码粘贴到 phpMyAdmin 中,则会出现此错误:#1227 - 访问被拒绝;您需要此操作的 SUPER 权限
If I paste this code in phpMyAdmin I get this error: #1227 - Access denied; you need the SUPER privilege for this operation
我尝试删除/!50003"和/"以取消对 SQL 的注释,但我收到相同的错误消息.
I tried removing the "/!50003" and the "/" to uncomment the SQL but I get the same error message.
我也尝试不使用任何分隔符并删除DELIMITER ;;"并收到此错误:
I also tried not using any delimitors and removing "DELIMITER ;;" and got this 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
也试过:
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//
导致:
#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
是SQL、phpMyAdmin的问题还是服务器的问题?
Is the problem in the SQL, phpMyAdmin or with the server?
推荐答案
问题是我没有超级权限,但是如果我从查询中删除 DEFINER,我就不再需要这个权限了.
The problem was I didn't have the super privilege but if I remove the DEFINER from the query I don't need this privilege anymore.
从 MySQL 5.0.3 开始,CREATE PROCEDURE 和 CREATE FUNCTION 需要CREATE ROUTINE 特权.他们可能还需要超级特权,取决于 DEFINER 值,如本节后面所述.如果启用二进制日志记录,CREATE FUNCTION 可能需要 SUPER特权,如第 18.6 节,存储的二进制日志程序".
As of MySQL 5.0.3, CREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE privilege. They might also require the SUPER privilege, depending on the DEFINER value, as described later in this section. If binary logging is enabled, CREATE FUNCTION might require the SUPER privilege, as described in Section 18.6, "Binary Logging of Stored Programs".
还必须在 SQL 文本框下设置分隔符字段.
Also had to set the delimiter field under the SQL text box.
这是没有 DEFINER 语句的 SQL 查询:
Here's the SQL Query without the DEFINER statement:
/*!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 */;;
这篇关于在 phpMyAdmin 中创建函数 - 错误:访问被拒绝,此操作需要超级权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 phpMyAdmin 中创建函数 - 错误:访问被拒绝,此操作需要超级权限


基础教程推荐
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 带更新的 sqlite CTE 2022-01-01