mysql - 拒绝访问;您需要(至少一个) super 权限才能执行此操作

所以我尝试将 sql 文件导入 rds (1G MEM, 1 CPU)。 sql文件好像1.4G

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

它卡在:

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 中不存在,所以我这样做:

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

还是没有运气。

最佳答案

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

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

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

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

https://stackoverflow.com/questions/44015692/

相关文章:

mysql - 何时在 mysql 中使用 TEXT 而不是 VARCHAR

sql - 如何选择一个空的结果集?

php - 在 Android 上运行 AMP (apache mysql php)

php - 基于信誉实现权限

mysql - 如何在 MySQL 中获得减去 6 周的时间戳?

mysql - 为什么 MySQL 会在 FULL OUTER JOIN 上报告语法错误?

sql - 在 MySQL 中重命名外键列

mysql - 如何将两列与mysql中的现有列名合并为一?

mysql - 将 MySQL 数据库置于版本控制之下?

mysql - 我应该只坚持使用 AWS RDS 自动备份还是数据库快照?