目录
MySQL 5.7 和 MySQL 8.0 在授权 root账号(以及所有用户账号)的语法、默认安全设置和整体权限管理逻辑上存在关键差异,其中最核心的区别在于用户创建与授权的分离,以及默认身份认证插件的变更。
1. 用户创建与授权语法
1.1 MySQL 5.7
在 MySQL 5.7 中,可以使用一条 GRANT语句同时创建用户并授予权限。其语法通常如下:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
这条命令会检查用户 'root'@'%'是否存在,如果不存在则自动创建,然后授予所有权限。
1.2 MySQL 8.0
而在 MySQL 8.0 中,用户创建和权限授予必须分为两个独立的步骤执行。
-
首先,需要使用
CREATE USER语句创建用户:CREATE USER 'root'@'%' IDENTIFIED BY 'password'; -
然后,使用
GRANT语句授予权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';如果在 MySQL 8.0 中尝试使用 MySQL 5.7 的合并语法,会导致 SQL 语法错误。
2. 默认身份认证插件
MySQL 5.7 默认的身份认证插件是 mysql_native_password。
MySQL 8.0 将默认的身份认证插件更改为 caching_sha2_password,这提供了更强的密码安全性。这一变更是导致部分旧版本客户端或应用程序在尝试连接 MySQL 8.0 时可能失败的主要原因。如果遇到兼容性问题,可以将特定用户的认证插件改回 mysql_native_password:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
3. 密码管理策略
MySQL 8.0 引入了更精细的密码管理策略,而 MySQL 5.7 在这方面功能相对简单。
-
密码历史策略:在 MySQL 8.0 中,可以设置
password_history规则,强制用户在一定次数内不能重复使用旧密码。 -
密码过期策略:MySQL 8.0 支持密码过期策略,可以要求用户定期更换密码。
4. 角色管理支持
MySQL 8.0 引入了基于角色的权限管理机制。可以创建角色,将一组权限授予角色,然后再将角色分配给用户,这大大简化了多用户环境下相同权限集的分配和管理工作。MySQL 5.7 不支持此功能,必须为每个用户单独授权。
5. 配置持久化
在 MySQL 5.7 中,使用 SET GLOBAL命令设置的全局变量是临时的,重启服务后会失效,必须通过修改配置文件(如 my.cnf)才能永久生效。
MySQL 8.0 新增了 SET PERSIST命令,可以将动态修改的配置持久化到配置文件(如 mysqld-auto.cnf)中,即使服务重启,设置也会保留。这对于一些与服务器行为相关的全局设置(非用户权限相关)的持久化非常方便。
6. 核心差异速览
下表清晰地总结了 MySQL 5.7 和 MySQL 8.0 在授权 root(或任何用户)时的核心区别:
| 特性 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 用户创建与授权 | 一条 | 必须分开执行:先 |
| 默认认证插件 |
|
|
| 密码管理 | 功能相对简单 | 增强:支持密码历史、过期时间等策略 |
| 角色管理 | 不支持 | 支持:可创建角色并批量分配权限,简化管理 |
| 配置持久化 | 使用 | 支持 |
总而言之,MySQL 8.0 在用户权限管理上朝着更安全、更规范、更易管理的方向演进。在授权 root账号时,务必注意语法上的差异。同时,也要关注认证插件变更可能带来的客户端连接兼容性问题。

被折叠的 条评论
为什么被折叠?



