MySQL 8.0 执行 GRANT 报 ERROR 1064 或 1410,是因为 IDENTIFIED BY 语法被彻底删除,解析器在语法层直接拒绝;必须严格分两步:先 CREATE USER(显式指定 mysql_native_password 插件),再 GRANT 授权,且顺序不可颠倒。

MySQL 8.0 执行 GRANT 报 ERROR 1064 或 ERROR 1410,根本不是你写错引号或权限名,而是语句里出现了 IDENTIFIED BY——这个语法在 8.0+ 已被彻底删除,解析器直接拒绝执行。
为什么 GRANT ... IDENTIFIED BY 一定会报错
MySQL 8.0 拆分了用户创建和权限授予两个动作:CREATE USER 负责身份、密码、认证插件;GRANT 只管权限分配。任何在 GRANT 后面跟 IDENTIFIED BY 的写法(比如 GRANT SELECT ON db.* TO 'u'@'%' IDENTIFIED BY 'p')都会触发语法层拦截,报 ERROR 1064(语法错)或 ERROR 1410(禁止隐式建户)。
这不是配置问题、不是权限不足、也不是客户端工具导致的——哪怕你是 root,哪怕 host 是 '%',照样失败。
- 执行
SELECT VERSION();确认版本:返回8.0.x、8.3.x等即坐实该限制 - Docker 镜像、云数据库(PolarDB、CVM MySQL 实例)默认都是 8.0+,本地开发环境却可能是 5.7,混用极易踩坑
- 错误信息里带
42000错误码,基本可锁定是语法移除而非运行时异常
CREATE USER 和 GRANT 必须严格分步且顺序不能颠倒
正确流程只有三步,缺一不可:
CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';
GRANT SELECT, INSERT ON mydb.* TO 'u'@'%';
FLUSH PRIVILEGES;
- 如果用户已存在,
CREATE USER会报ERROR 1396,此时改用ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd' -
GRANT语句里绝不能出现IDENTIFIED BY或IDENTIFIED WITH,否则立刻ERROR 1064 -
FLUSH PRIVILEGES在脚本化部署、跨客户端操作或权限表结构异常时建议显式执行,不是“可有可无”
连得上但认证失败?大概率是 caching_sha2_password 插件不兼容
即使上面三步全对,仍可能遇到:
- MySQL Workbench 卡在 “Authenticating…”
- JDBC 报
Access denied for user(用户名密码没错) - PHP
mysqli_connect()失败,错误含caching_sha2_password
这不是权限没给,是连接握手阶段就断了——MySQL 8.0 默认用 caching_sha2_password 插件,而旧版 PHP/Python/JDBC 驱动不认识它。
- 建用户时务必显式指定兼容插件:
CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd' - 别依赖
default_authentication_plugin全局配置,那要重启 mysqld,且影响所有新用户 - 已有用户改插件:用
ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd',再FLUSH PRIVILEGES
Host 字符串必须完全一致,大小写和空格都算错配
'u'@'localhost' 和 'u'@'127.0.0.1' 是两个独立账号,'u'@'%' 和 'u'@'10.0.2.%' 也不互通。常见错配:
- Navicat 默认存
'u'@'%',你在命令行写了'u'@'127.0.0.1',查不到也授不了权 - 应用连的是
127.0.0.1(TCP),但只授权了'u'@'localhost'(Unix socket) - Linux 下数据库名、用户名、host 全部区分大小写;Windows 下 host 不敏感,但统一小写最稳妥
验证是否真生效:用目标用户从目标 IP 连接后执行 SHOW GRANTS FOR 'u'@'h';,输出必须含你刚授的权限,而不是只有 USAGE。
最容易被跳过的其实是认证插件——它不报语法错、不拦 SQL 执行,只在应用第一次 connect 时静默失败。从第一个用户开始就明确插件策略,比事后排查快得多。


















