解决MySQL 8.0+中GRANT语句报错问题

键盘旁的猫
键盘旁的猫
发布时间:2026-10-15 | 4人浏览过
原创

在MySQL 8.0及以上版本中,直接使用包含IDENTIFIED BY的GRANT语句进行授权会触发语法错误。这是因为MySQL 8.0改变了用户管理逻辑,将账户创建与权限分配分离。本文将解析这一变化,并提供适用于新版本的正确操作步骤。

MySQL 8.0之前的传统写法

在MySQL 5.7及更早的版本中,管理员通常使用一条命令同时完成用户创建、密码设置和权限赋予。这种写法简洁直观,但在MySQL 8.0中已不再被直接支持。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

该语句的各个参数含义如下:

  • GRANT:执行权限分配的命令关键字。
  • ALL PRIVILEGES:表示赋予当前用户所有可用的数据库权限。
  • ON *.*:指定权限作用的范围,此处指所有数据库下的所有表。
  • 'root'@'%':指定目标用户为root,且允许从任意IP地址(%通配符)连接。
  • IDENTIFIED BY '123456':设置该用户的登录密码为123456。
  • WITH GRANT OPTION:允许该用户将自己的权限再次授予其他用户。

MySQL 8.0+ 的报错原因与解决方案

在MySQL 8.0及更新版本中,如果尝试执行上述单行GRANT语句,系统会返回语法错误。根本原因在于MySQL 8.0引入了更严格的账户管理体系,要求先明确存在一个用户实体,才能对其进行权限操作。

解决思路:必须分两步执行,先将用户创建出来并设定密码,然后再授予权限。

第1步:创建用户并设置密码

首先使用CREATE USER语句建立账号。这一步仅验证密码强度并注册账户,不附带任何数据库权限。

CREATE USER 'root'@'%' IDENTIFIED BY '123456';

执行后,若未报错即表示用户创建成功。此时该用户虽然存在,但尚无任何操作数据库的能力。

第2步:授予访问权限

接下来使用GRANT语句赋予该用户所需的访问范围。注意,此处的GRANT语句中不再包含IDENTIFIED BY部分。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

此操作将全库权限赋予给刚才创建的root用户,并开启级联授权能力。

第3步:刷新权限缓存

为了使改动立即生效,建议执行以下命令刷新权限表:

FLUSH PRIVILEGES;

至此,完整的MySQL 8.0+远程root权限配置已完成。

注意事项与安全提醒

虽然上述方法解决了兼容性问题,但从安全角度出发,生产环境中不建议直接开放'root'@'%'的所有权限。%代表允许来自任何IP的连接,这会极大增加被暴力破解的风险。建议仅在测试环境或内网可信网络中使用,并为不同应用创建拥有最小必要权限的专用账户。

以上就是解决MySQL 8.0+中GRANT语句报错问题的详细内容,更多关于MySQL权限配置的技巧请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表