文章目录
-
- [问题一: 如何绕过安全检查设置简单密码?](#问题一: 如何绕过安全检查设置简单密码?)
- [问题二:在使用 CREATE USER 之前,必须先使用 ALTER USER 修改 root localhost 的密码吗?](#问题二:在使用 CREATE USER 之前,必须先使用 ALTER USER 修改 root localhost 的密码吗?)
- [问题三?GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;和FLUSH PRIVILEGES;是一个原理吗?](#问题三?GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;和FLUSH PRIVILEGES;是一个原理吗?)
-
- [问题四:CREATE USER 'root'@'%' IDENTIFIED BY 'Atguigu.123'; 其中的'root'@'%'是什么意思?](#问题四:CREATE USER 'root'@'%' IDENTIFIED BY 'Atguigu.123'; 其中的'root'@'%'是什么意思?)
问题一: 如何绕过安全检查设置简单密码?
分析:Error 1819:你想改简单密码,但系统嫌密码太简单,不让你改。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
解决:绕过安全检查设置简单密码
现在处于"必须改密码"的状态(Error 1820),无法直接修改安全配置.。
-
先暂时妥协,设置一个符合要求的复杂密码。
为了解锁终端,先设置一个包含 大写字母 + 小写字母 + 数字 + 特殊符号 的密码(临时用,马上就会改掉)。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_1234';

-
降低安全策略等级.
把那个烦人的密码策略关掉或者调低
- 查看当前策略变量名(不同版本 MySQL 变量名可能是
validate_password_xxx或validate_password.xxx):
SHOW VARIABLES LIKE 'validate_password%';
- 修改策略(根据上一步查到的名字,如果是 MySQL 5.7 是下划线,8.0 是点。以下以 MySQL 8.0 常见的点号为例):
sql
-- 将策略等级设为 LOW (只校验长度)
SET GLOBAL validate_password.policy = 0;
-- 将密码最小长度设为 1 (实际 MySQL 最低限制通常是 4)
SET GLOBAL validate_password.length = 1;

-
此时,就可以修改简单的密码了

-
检查
-
成功

问题二:在使用 CREATE USER 之前,必须先使用 ALTER USER 修改 root localhost 的密码吗?
是的,必须先修改。
分析:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
表示 MySQL 处于一种"待初始化"的封锁状态。
在这种状态下,MySQL 拒绝执行任何 非重置密码的操作。你必须先对当前登录的用户(即 'root'@'localhost')执行 ALTER USER 重置密码,让 MySQL 知道"我已经初始化完毕了",解除封锁状态后,你才能去创建其他的远程用户。
设置其他远程用户。
在这里插入代码片;
sql
-- 第一步:先解锁本地账号(必须做!否则后面的 CREATE 会报错)
-- 既然你用了 Atguigu.123 这个复杂密码,就不需要降低安全策略了,直接用它
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Atguigu.123';
-- 第二步:现在的你已经"自由"了,可以执行你的三行命令了
CREATE USER 'root'@'%' IDENTIFIED BY 'Atguigu.123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

问题三?GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;和FLUSH PRIVILEGES;是一个原理吗?
它们不仅原理不同,甚至是完全相反的操作逻辑。
- GRANT 命令
原理:标准流程办理(写数据 + 自动生效)
场景:你要给一个新员工(root)开通所有门禁权限。
动作:你走到安保处的窗口,对管理员说:"给 root 办一张全通卡"。
结果:管理员在电脑里录入信息,同时通知门禁系统。
状态:立刻生效。root 拿着卡马上就能刷开门,不需要做任何额外操作。
技术层面:GRANT 命令会同时修改磁盘上的权限表(持久化)和内存中的权限缓存(即时生效)。- FLUSH PRIVILEGES 命令
原理:强制刷新系统(重读数据)
场景:你没有走安保处窗口,而是像黑客一样,偷偷溜进机房,直接用笔在硬盘里的"白名单文件"上手写了一行字:允许 root 进门。
问题:虽然文件改了,但门禁系统的内存里还存着旧的名单,它不知道你偷偷改了文件。这时候 root 刷卡还是进不去。
动作:你按下了门禁系统的**"重启/刷新按钮"**。 结果:系统重新启动,把硬盘里的白名单文件重新读取了一遍,这时候它才发现:"哦,多了一个
root"。 技术层面:FLUSH PRIVILEGES 强迫 MySQL 放弃内存里现有的权限数据,重新从磁盘的表中加载一份新的。


问题四:CREATE USER 'root'@'%' IDENTIFIED BY 'Atguigu.123'; 其中的'root'@'%'是什么意思?
在 MySQL 中,'root'@'%' 是由两部分组成的,它定义了一个完整的用户账号。
在 MySQL 眼里,账号不仅仅是用户名,**而是"用户名 + 允许登录的地址"。
**

'root'@'%' 的完整含义 --- 一个名为 root 的用户,允许使用正确的密码,从世界上的任何一台电脑(任何 IP)远程连接到通过这个数据库。

