更全面的信息可以参考:
从 MySQL 8.0.14 开始,用户帐户允许拥有双重密码,指定为主密码和辅助密码。双密码功能使得在以下场景中无缝执行凭证更改成为可能:
一个系统有大量MySQL服务器,可能涉及到复制。
多个应用程序连接到不同的 MySQL 服务器。
必须定期对应用程序用于连接服务器的一个或多个帐户进行凭据更改【例如等保等合规要求】。
考虑在上述类型的场景中,当一个帐户只允许使用一个密码时,必须如何执行凭据更改。在这种情况下,必须在何时进行帐户密码更改并在所有服务器中传播以及何时将所有使用该帐户的应用程序更新为使用新密码的时间进行密切合作。此过程可能会涉及服务器或应用程序不可用的停机时间。
使用双密码,可以更轻松地分阶段进行凭证更改,无需密切合作,也无需停机:
对于每个受影响的帐户,在服务器上建立新的主密码,保留当前密码作为辅助密码。这使服务器能够识别每个帐户的主密码或辅助密码,而应用程序可以继续使用与以前相同的密码(现在是辅助密码)连接到服务器。
密码更改传播到所有服务器后,修改使用任何受影响帐户以使用帐户主密码进行连接的应用程序。
当所有应用程序从辅助密码迁移到主密码后,不再需要辅助密码,可以将其丢弃。此更改传播到所有服务器后,只能使用每个帐户的主密码进行连接。凭证更改现已完成。
[(none)]> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.32-24 |
+-----------+
1 row in set (0.00 sec)
1 创建一个业务账号
[(none)]> create user app_user1@'%' identified by '123456';
Query OK, 0 rows affected (1.02 sec)
[(none)]> grant select on sbtest.* to app_user1@'%';
Query OK, 0 rows affected (0.03 sec)
2 使用app_user1账号进行db的连通性测试
$ mysql -uapp_user1 -h127.0.0.1 -p123456 -e 'select id from sbtest.sbtest1 limit 1'
+----------+
| id |
+----------+
| 10371557 |
+----------+
3 对这个业务账号 建立新的主密码,保留当前密码作为辅助密码
ALTER USER app_user1@'%' IDENTIFIED BY '654321' RETAIN CURRENT PASSWORD;
4 业务系统开始分批发版,更换app_user1的密码为654321
在业务系统更换密码的此期间,使用新的和老的密码都可以访问数据库,并且权限也没有变化
5 随着业务系统发版,当密码全部替换成新密码后,就可以在MySQL上丢弃辅助密码(也就是老密码)
ALTER USER app_user1@'%' IDENTIFIED BY '654321' DISCARD OLD PASSWORD;
注意:
1 密码是否替换彻底,这个从数据库层面不好判断,需要基于代码来梳理。
2 修改辅助密码的语句需要以下权限:
- 需要有权限 APPLICATION_PASSWORD_ADMIN 才能将RETAIN CURRENT PASSWORDorDISCARD OLD PASSWORD子句用于适用于您自己的帐户的ALTER USER和语句。SET PASSWORD操作您自己的二级密码需要该权限,因为大多数用户只需要一个密码。
- 如果要允许某个帐户操纵所有帐户的辅助密码,则应授予该帐户该 CREATE USER权限而不是 APPLICATION\_PASSWORD_ADMIN.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。