RDS for MySQL权限问题(错误代码:1227,1725)|Access denied; you need (at least one of) the SUPER privilege(s) for this operation


RDS for MySQL权限问题(错误代码:1227,1725)

 

1. 错误信息

2. 错误出现的场景

3. 错误原因

4. 解决

4.1 去除 DEFINER 子句

4.2 去除 GTID_PURGED 子句

4.3 检查修改后的文件


1. 错误信息

[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation --常见于 RDS MySQL 5.6ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN --常见于 RDS MySQL 5.5

 2. 错误出现的场景

  • 在创建 存储过程、函数、触发器、事件、视图的时候出现这个错误。

  • 从本地数据库导出 SQL,在 RDS 上应用该 SQL 的时候出现该错误。

  • 从 RDS for MySQL 5.6 实例下载逻辑备份,导入到 RDS 或本地数据库中。

3. 错误原因

  • 导入RDS MySQL 实例:SQL 语句中含有需要 Supper 权限才可以执行的语句,而 RDS MySQL不提供 Super 权限,因此需要去除这类语句。
  • 本地 MySQL 实例没有启用 GTID。

4. 解决

4.1 去除 DEFINER 子句

检查 SQL 文件,去除下面类似的子句

DEFINER=`root`@`%`

在 Linux 平台下,可以尝试使用下面的语句去除:

sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/ ' your.sql > your_revised.sql

4.2 去除 GTID_PURGED 子句

检查 SQL 文件,去除下面类似的语句

SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373,
d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';

在 Linux 平台,可以使用下面的语句去除

awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql

4.3 检查修改后的文件

修改完毕后,通过下面的语句检查是否合乎要求。

egrep -in "definer|set @@" your_revised.sql

如果上面的语句没有输出,说明 SQL 文件符合要求。


注:本文转载自https://developer.aliyun.com/article/66463,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。

微蓝网际编程论坛- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与微蓝网际编程论坛立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin微蓝网际编程论坛享有帖子相关版权。
3、微蓝网际编程论坛管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin微蓝网际编程论坛的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。


上一篇:【数据库】gz数据库文件恢复gz导入
下一篇:查询表字段被哪些表外键依赖
快速回复
站长:秋枫雁飞 AI微蓝网管理员!有问题请发消息给我!
最新回复 (0)
只看楼主
全部楼主
    • 微蓝网际编程论坛
      2
          
返回
免责声明:本站部分内容来源于网络,若有侵权请及时通知(aiweline@qq.com),我们会及时处理。