本文介绍了拒绝访问;您需要(至少其中一种)SUPER权限才能执行此操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我尝试将sql文件导入rds(1G MEM,1个CPU). sql文件就像1.4G

So I try to import sql file into rds (1G MEM, 1 CPU). The sql file is like 1.4G

mysql -h xxxx.rds.amazonaws.com -u用户-ppass --max-allowed-packet = 33554432 db< db.sql

mysql -h xxxx.rds.amazonaws.com -u user -ppass --max-allowed-packet=33554432 db < db.sql

它停留在:

ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

实际的sql内容是:

/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN
        SET NEW.created_at = NOW();
END IF */;;

another_user在rds中不存在,所以我这样做:

another_user is not existed in rds, so I do:

GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';

还是没有运气.

推荐答案

从您的sqldump文件中删除DEFINER=..语句,或将用户值替换为CURRENT_USER.

Either remove the DEFINER=.. statement from your sqldump file, or replace the user values with CURRENT_USER.

根据我的经验,RDS提供的MySQL服务器不允许其他用户使用DEFINER语法.

The MySQL server provided by RDS does not allow a DEFINER syntax for another user (in my experience).

您可以使用sed脚本将其从文件中删除:

You can use a sed script to remove them from the file:

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql

这篇关于拒绝访问;您需要(至少其中一种)SUPER权限才能执行此操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:39