代码改变世界

MySQL双重密码是如何工作的

2022-11-28 17:23  abce  阅读(66)  评论(0编辑  收藏  举报

假设先创建了一个用户:

MySQL> create user abce@'%' identified by 'abce';
Query OK, 0 rows affected (0.01 sec)

MySQL> grant all on abce.* to abce@'%';
Query OK, 0 rows affected (0.00 sec)

MySQL>select user,host, plugin, authentication_string, password_last_changed,User_attributes from mysql.user where user = 'abce'\G
*************************** 1. row ***************************
                 user: abce
                 host: %
               plugin: caching_sha2_password
authentication_string: $A$005$`+
                                G4ZSoB@>f%ss
AFPNm4zceJJXAQNT6LlpAoQWrqHFqWWcfhN10MpJ0G/6
password_last_changed: 2022-11-28 17:11:02
      User_attributes: NULL
1 row in set (0.01 sec)

MySQL>

至此,用户就可以连接到数据库了。
运行一段事件以后,因为安全规定,收到DBA通知要求更改密码。

现在,你可能有两种环境:
1.你有使用双重密码的权限(需要application password admin权限)
2.你没有对应的权限

如果你没有权限,则需要dba执行变更,并将新的密码告诉你。

如果你有对应的权限,你自己就可以执行修改操作。

假设你有权限,你只需要执行:

MySQL>ALTER USER abce@'%' IDENTIFIED BY 'abce2' RETAIN CURRENT PASSWORD;
Query OK, 0 rows affected (0.01 sec)

MySQL>

然后,检查一下:

MySQL>select user,host, plugin, authentication_string, password_last_changed,User_attributes from mysql.user where user ='abce' order by 1,2\G
*************************** 1. row ***************************
                 user: abce
                 host: %
               plugin: caching_sha2_password
authentication_string: $A$005$|F7&oJ
                                    uniJ2HdED3s
                                               ?dkm6C1d.IuXLfS8Od5LYo/OwRaF4v0jnCr7AyTkjRd8
password_last_changed: 2022-11-28 17:11:51
      User_attributes: {"additional_password": "$A$005$`+\fG4Z\u0013SoB@>f%ss\n\u0010\u0012AFPNm4zceJJXAQNT6LlpAoQWrqHFqWWcfhN10MpJ0G/6"}
1 row in set (0.00 sec)

MySQL>

可以从User_attributes看到,旧的密码已经被移除了。至此,就可以安全地滚动升级密码变更,不会影响应用和用户。

一旦切换完毕,就可以通知dba移除老的密码了,或者:

MySQL>ALTER USER 'abce'@'%' DISCARD OLD PASSWORD;
Query OK, 0 rows affected (0.01 sec)

MySQL>

然后,再次检查一下:

MySQL>select user,host, plugin, authentication_string, password_last_changed,User_attributes from mysql.user where user ='abce' order by 1,2\G
*************************** 1. row ***************************
                 user: abce
                 host: %
               plugin: caching_sha2_password
authentication_string: $A$005$|F7&oJ
                                    uniJ2HdED3s
                                               ?dkm6C1d.IuXLfS8Od5LYo/OwRaF4v0jnCr7AyTkjRd8
password_last_changed: 2022-11-28 17:11:51
      User_attributes: NULL
1 row in set (0.00 sec)

MySQL>