mysql 8.0 彻底移除 grant 中 identified by 语法,必须分两步:先 create user(可指定认证插件),再 grant 授权;混用或顺序颠倒均报 error 1064 或 1410。

MySQL 8.0 不支持 GRANT ... IDENTIFIED BY,不是语法写错了,是这条语句被彻底删了——解析器见到 IDENTIFIED BY 就直接拒掉,不给任何商量余地。
ERROR 1064 或 ERROR 1410 是明确的语法拒绝信号
这两个错误不是权限不足、密码格式不对或用户已存在导致的,而是 MySQL 8.0 解析器在语法层就拦截了:GRANT 语句里只要出现 IDENTIFIED BY,不管前后怎么写,一律报错。
-
GRANT ALL ON *.* TO 'u'@'%' IDENTIFIED BY 'p'→ 报ERROR 1064 (42000) -
GRANT SELECT ON db.* TO 'u'@'localhost' IDENTIFIED BY 'p'→ 报ERROR 1410 (42000) - 哪怕你是
root,哪怕目标主机名是'%',照样失败,不降级、不兼容
CREATE USER 必须显式指定认证插件
MySQL 8.0 默认用 caching_sha2_password,但很多客户端(旧版 Workbench、JDBC 5.x、PHP mysqli)根本不认识它。你语法全对、FLUSH PRIVILEGES 也执行了,结果连不上——卡在握手阶段,连错误日志都不报。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 安全起见,创建时就该锁定插件:
CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'p' - 别依赖
default_authentication_plugin全局配置,那要重启 mysqld,且影响所有新用户 - 已有用户改插件用:
ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'p',之后建议跟一句FLUSH PRIVILEGES
GRANT 只管授权,不管身份和密码
8.0 把三件事彻底拆开:CREATE USER(注册身份+设密+选插件)、GRANT(分配权限)、ALTER USER(改密/换插件)。混用会直接失败,顺序也不能颠倒。
- 先
CREATE USER,再GRANT;反过来会报ERROR 1396 (HY000): Operation CREATE USER failed -
GRANT语句里绝不能带IDENTIFIED BY,哪怕只是想“顺便改个密码”也不行 - 改密码必须用
ALTER USER ... IDENTIFIED BY ...,不是SET PASSWORD,后者在 8.0 已弃用
最容易被跳过的其实是认证插件——它不报语法错、不拦 SQL 执行,只在应用第一次 connect 时静默失败。从第一个用户开始就明确插件策略,比事后排查快得多。










