MySQL报错#1227缺少SUPER权限 创建EVENT事件失败怎么解决?
错误原因
MySQL error #1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
这个报错的核心触发逻辑如下:
- 你创建EVENT的语句中显式指定了
DEFINER子句,MySQL规定只有拥有SUPER权限的用户,才有权限指定与当前登录账号不一致的DEFINER。本地XAMPP环境你默认使用root账号操作,拥有全部权限所以不会报错,而线上环境的普通数据库账号普遍不开放SUPER权限,避免越权操作。 - 部分云数据库服务商默认关闭了EVENT功能的普通用户使用权限,即便你权限配置正确,也需要先在控制台手动开启事件调度器相关权限才能创建事件。
解决方法
按优先级从高到低尝试以下方案即可:
- 去掉语句中的
DEFINER子句,创建时会默认使用当前登录账号作为DEFINER,不需要SUPER权限即可执行,修改后的语句如下:
CREATE EVENT `onlineoff` ON SCHEDULE EVERY 3 MINUTE STARTS '2021-11-06 13:19:59' ON COMPLETION NOT PRESERVE ENABLE DO UPDATE users set online='false';
执行前提是当前账号拥有对应数据库的EVENT权限,以及users表的UPDATE权限。
- 执行上述语句依然报错的话,先检查当前账号的权限:
SHOW GRANTS FOR CURRENT_USER;
如果返回结果中没有EVENT相关权限,联系服务器管理员或云数据库服务商给当前账号开通EVENT权限即可。
- 确认事件调度器已开启:
SHOW VARIABLES LIKE 'event_scheduler';
如果返回值为OFF,有权限的情况下执行SET GLOBAL event_scheduler = ON;开启,无全局权限的话到云数据库控制台的参数配置页面,将event_scheduler参数修改为ON后保存生效。
- 始终无法开通EVENT权限的场景,可以用系统定时任务替代实现相同效果:Linux环境下配置crontab每3分钟执行一次UPDATE语句,Windows环境下配置计划任务即可。
内容的提问来源于stack exchange,提问作者Black-Hat
相关产品推荐
相关产品推荐

