在传统的单密码模式下,当一个系统有大量服务器和应用步伐时,更改密码需要密切和谐服务器密码更新和应用步伐使用新密码的时间,这大概导致服务器或应用步伐出现停机情况。而双密码机制答应分阶段进行凭证更改,无需停机。
比方,在有多个 MySQL 服务器(包罗副本)且多个应用步伐连接的系统中,对于名为 ‘ceshi’@‘%’ 的账户,从密码 ‘123456’ 更改为 ‘123123’ 的过程如下:
在每台非副本服务器上,先执行以下命令建立新主密码并保存当前密码为辅助密码:
ALTER USER 'ceshi'@'%' IDENTIFIED BY '123123' RETAIN CURRENT PASSWORD;
复制代码
进行测试:
等待密码更改在整个系统(包罗全部副本)中复制完成。
修改使用该账户的每个应用步伐,使其使用新密码 ‘123123’ 连接服务器。
在每台非副本服务器上抛弃辅助密码:
ALTER USER 'ceshi'@'%' DISCARD OLD PASSWORD;
复制代码
将抛弃辅助密码的更改复制到全部副本后,密码更新完成,整个过程无需停机。
2. 灵活的密码管理
RETAIN CURRENT PASSWORD 子句作用:
此子句保存账户当前密码作为辅助密码,替换任何现有的辅助密码。新指定的密码成为主密码,客户端可以使用主密码或辅助密码连接服务器。不过需要留意,如果 ALTER USER 或 SET PASSWORD 语句指定的新密码为空,即使使用了 RETAIN CURRENT PASSWORD,辅助密码也将变为空。并且,如果指定 RETAIN CURRENT PASSWORD 的账户主密码为空,该语句将失败。如果账户有辅助密码,更改主密码时不指定 RETAIN CURRENT PASSWORD,则辅助密码保持不变。此外,对于 ALTER USER,如果更改账户的身份验证插件,则辅助密码将被抛弃;若同时指定 RETAIN CURRENT PASSWORD,则该语句将失败。
DISCARD OLD PASSWORD 子句作用:
此子句用于抛弃辅助密码(如果存在),账户仅保存主密码,客户端只能使用主密码连接服务器。
双密码管理的权限要求
修改辅助密码相关的语句需要特定权限。若要对本身的账户使用 RETAIN CURRENT PASSWORD 或 DISCARD OLD PASSWORD 子句进行 ALTER USER 和 SET PASSWORD 操纵,需要 APPLICATION_PASSWORD_ADMIN 权限。大多数用户只需要操纵本身的一个密码,但如果要答应某个账户利用全部账户的辅助密码,则应授予该账户 CREATE USER 权限,而不是 APPLICATION_PASSWORD_ADMIN 权限。
通过合理利用 MySQL 8.0 的双密码机制及其相关特性,可以在定期修改密码时,轻松实现无缝切换,同时保障系统的持续可用性和安全性。
总结