MySQL 8.x 使用 GRANT 赋权报错的解决方法

Dylan
Dylan
发布时间:2026-10-16 | 5人浏览过
原创

在升级或安装 MySQL 8.x 时,许多用户发现旧版本的 GRANT ... IDENTIFIED BY 授权方式会直接引发语法错误。本文将解析这一变更背后的逻辑,并提供标准的三步式正确配置流程。

问题现象:MySQL 8.x 授权语法报错

在使用 MySQL 5.x 版本时,通常可以通过一条 GRANT 语句同时完成用户的创建、密码设置和权限赋予。但在 MySQL 8.x 环境下尝试执行以下命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456' WITH GRANT OPTION' at line 1

此时数据库会返回 ERROR 1064 (42000),提示语法不正确。该问题不仅限于 root 账户,在对新建账号进行类似授权时同样会出现。

原因分析:账户管理与权限分离

根据 MySQL 官方文档规范,从 MySQL 8.0 开始,数据库的设计发生了显著变化:创建新账户(CREATE USER)与授权(GRANT)被严格区分开来。

  • MySQL 5.x 时代: GRANT 命令若检测到用户不存在,会自动创建一个新用户并关联密码。
  • MySQL 8.x 时代: GRANT 命令仅用于管理现有用户的权限,不再支持 IDENTIFIED BY 子句。如果需要建立新用户,必须先显式使用 CREATE USER 语句。

这种分离设计提高了安全性与管理清晰度,管理员必须明确地先建立用户实体,再为其配置具体的资源访问限制。

解决方案:标准的赋权操作顺序

为了解决此报错并在 MySQL 8.x 中正确配置具有远程访问权限的用户,请严格按照以下三个步骤执行:

第 1 步:确认 MySQL 当前版本

在执行任何变更前,建议查询服务器确切版本,以排除低版本 MySQL 的兼容性问题:

SELECT @@VERSION;

第 2 步:创建独立账户

首先,通过 CREATE USER 命令在数据库中注册该用户并设定访问主机范围(如 % 代表任意地址,或指定具体 IP)。注意此处仅做账户建立,不附带权限:

CREATE USER '用户名'@'访问主机' IDENTIFIED BY '密码';
# 示例:
-- CREATE USER 'testuser'@'%' IDENTIFIED BY 'StrongPassword123!';

第 3 步:执行权限授予 (GRANT)

账户建立成功后,使用 GRANT 命令赋予该用户所需的具体权限。如需赋予全部权限(包含转授权限),可使用如下格式:

GRANT ALL PRIVILEGES ON *.* TO '用户名'@'访问主机' WITH GRANT OPTION;
# 示例:
-- GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%' WITH GRANT OPTION;

第 4 步:刷新权限表

最后,通知 MySQL 服务器重新加载内存中的权限表,确保修改立即生效:

FLUSH PRIVILEGES;

简要总结

MySQL 8.x 拒绝“一步到位”的授权命令是出于架构安全性的考量。在处理此类问题时,核心原则是保持操作的原子性:先独立建户(CREATE USER),再集中授权(GRANT),最后重载缓存(FLUSH PRIVILEGES)。掌握这一正确的操作顺序即可彻底规避 ERROR 1064 异常。

以上就是 MySQL 8.x 使用 GRANT 为用户赋权时报错的详细内容,更多关于 MySQL 权限管理优化与语法调整的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表