如何给所有用户授予myprocedure存储过程执行权限?报错1410
解决MySQL授予所有用户存储过程执行权限报错的问题
问题根源
你的授权语句存在两个关键错误:
- MySQL中用户名的合法通配符是
%,而非你使用的* - 主机名通配符只需写
%,%%属于无效写法
另外,MySQL 8.0及以上版本禁止通过GRANT语句自动创建用户,这是触发1410 (42000): You are not allowed to create a user with GRANT报错的核心原因。
解决方案
针对MySQL 8.0及以上版本
先显式创建通配符用户(若该用户不存在):
CREATE USER IF NOT EXISTS '%'@'%' IDENTIFIED BY 'strong_password_here';注意:创建允许任意主机登录的通配符用户存在安全风险,建议根据实际需求限制主机范围(比如
'%'@'192.168.%.%'),且必须设置强密码。授予存储过程执行权限:
GRANT EXECUTE ON PROCEDURE myprocedure TO '%'@'%';刷新权限使设置生效:
FLUSH PRIVILEGES;
针对MySQL 5.x版本
直接修正通配符后执行授权语句:
GRANT EXECUTE ON PROCEDURE myprocedure TO '%'@'%';若仍报错,检查是否开启了
NO_AUTO_CREATE_USER模式:- 临时关闭该模式并完成授权:
SET sql_mode = REPLACE(@@sql_mode, 'NO_AUTO_CREATE_USER', ''); GRANT EXECUTE ON PROCEDURE myprocedure TO '%'@'%'; SET sql_mode = CONCAT(@@sql_mode, ',NO_AUTO_CREATE_USER'); - 刷新权限:
FLUSH PRIVILEGES;
- 临时关闭该模式并完成授权:
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

