#1227 - 拒绝访问;您需要(至少一个)SUPER权限才能进行此操作。

41

你好,我当前遇到了MySQL的问题!

出了什么问题呢?我是一个用户,我找过一些资料但并没有找到确切的答案。似乎这个问题比其他人遇到的错误代码问题更具体。请给我提供一个详细的回复,方便我跟进解决!顺便说一下,我在使用一个共享主机账户。

DELIMITER $$--
-- Functions
--
CREATE DEFINER =  `root`@`localhost` FUNCTION  `fnc_calcWalkedDistance` (

`steamid64` BIGINT UNSIGNED
) RETURNS INT( 10 ) UNSIGNEDNO SQL BEGIN DECLARE finished INTEGER DEFAULT 0;

DECLARE distance INTEGER DEFAULT 0;

DECLARE x1, x2, z1, z2 FLOAT;

DECLARE curs CURSOR FOR SELECT x, z
FROM log_positions
WHERE  `steamid` = steamid64
ORDER BY  `timestamp` DESC ;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished =1;

OPEN curs;

FETCH curs INTO x1, z1;

SET x2 = x1;

SET z2 = z1;

calculate : LOOPFETCH curs INTO x1, z1;

IF finished =1 THEN LEAVE calculate;

END IF ;

SET distance = distance + SQRT( POW( x2 - x1, 2 ) + POW( z2 - z1, 2 ) ) ;

-- SET distance = distance + 1;
SET x2 = x1;

SET z2 = z1;

END LOOP calculate;

CLOSE curs;

RETURN distance;

END$$

错误代码如下:

MySQL said: Documentation

#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation 
6个回答

84

这意味着您没有使用 root@localhost 用户创建触发器的权限。

尝试从触发器命令中删除定义者:

CREATE DEFINER = root@localhost FUNCTION fnc_calcWalkedDistance


2
我将我的数据库转储到SQL文件中,我不记得创建任何这样的函数...在转储文件中搜索,我发现在最后一行有这些命令,我删除了它们,然后就可以工作了,谢谢。 - rafaelfndev
1
谢谢,对于我的情况,我通过将 root@localhost 重命名为 serverusername@localhost 来解决了这个问题。 - JWC May
只需将“root”替换为数据库登录名即可。 - David Bister

39

只需删除 "DEFINER=你的用户名@localhost",然后从phpmyadmin运行SQL即可正常工作。


4
这很有效,是个完美的答案。GoDaddy告诉我应该购买专用服务器,但你救了我的一天。 - Visal Varghese
否则,将用户名更改为已经拥有所有权限的用户名。 - JWC May

22

如果您在cPanel上上传sql文件,则尝试在您的sql文件中将root替换为您的cPanel用户名。

在上述情况中,您可以编写:

CREATE DEFINER = 控制面板用户名@localhost FUNCTION fnc_calcWalkedDistance

然后上传文件。 希望这有所帮助。


2
对我来说,是control_panel_user@localhost。 - FosAvance

6

从所有调用中删除 DEFINER=root@localhost,包括存储过程。


0
要么删除该行CREATE DEFINER = root@localhost,要么将其更改为CREATE DEFINER = <mysqluser> @<mysqlhost> 如果删除DEFINER属性,则默认值将是当前用户帐户。
注意:DEFINER是定义存储过程或函数的可选属性。

0

更改

CREATE DEFINER =  `root`@`localhost` FUNCTION  `fnc_calcWalkedDistance` (

通过

FUNCTION  `fnc_calcWalkedDistance` (

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接