vlambda博客
学习文章列表

运维日记丨MySQL8.0的密码管理

各位新朋友~记得先点蓝字关注我哦~


在早期的MySQL中,MySQL的密码管理还比较粗糙,数据库的账户安全性还远远不足。终于到了MySQL8.0版本,MySQL对密码管理做出了跨越式的加强。


MySQL8.0支持的功能:

  • 密码过期:建立密码过期的策略,强制定期更改密码以保证密码安全。

  • 密码重用限制:对旧密码进行限制,防止旧密码再次被选择。

  • 密码验证:在密码更改时要求给出要替换的当前密码,防止密码被恶意修改。

  • 双密码:客户端能够建立新的主密码,保留当前密码作为辅助密码。

  • 密码强度评估:要求用户密码的高强度性和高复杂性以提高安全性。

  • 随机密码生成:可以为用户生成随机密码,创建更好的密码。

  • 密码失败跟踪:在连续多次错误密码登录失败后将用户临时锁定。

►►►

密码过期策略


MySQL允许数据库管理员手动使账户密码过期,并建立自动密码过期策略。其实密码过期策略从MySQL5.7开始支持,如初始化数据库时提供的初始化密码,就是一个过期密码。

运维日记丨MySQL8.0的密码管理

mysql.user表中的password_expired字段记录着密码的过期情况

运维日记丨MySQL8.0的密码管理
通过ALTER USER ...... PASSWORD EXPIRE ......可以设置指定账户密码的过期情况,或者通过设置参数default_password_lifetime来决定用户密码的过期时间。
运维日记丨MySQL8.0的密码管理
当客户端连接时,服务器会判断账户密码是否已过期。确定密码过期之后,服务器要么断开客户端连接,要么限制其登录后的操作,受限的客户端执行操作时会报错,提醒用户建立新的账户密码。
尽管可以通过将过期密码设置为其当前值来“重置”过期密码,但最好改成不同的密码。DBA可以通过建立适当的密码重用策略来强制不重用。也就是接下来要介绍的密码重用策略。


►►►

密码重用策略


MySQL可以限制重复使用以前使用过的密码。可以根据密码更改的次数、经过的时间甚至两者来建立重用限制。账户的密码历史记录记录着它过去使用的密码。MySQL以此历史记录限制用户选择旧密码作为新密码:

  • 如果账户因密码更改次数受到限制,则无法从指定数量的最近密码中选择新密码。

  • 如果账户基于经过的时间受到限制,则无法从历史记录中超过指定天数的密码中选择新密码。

  • 空密码不计入密码历史记录,并可随时重复使用。

运维日记丨MySQL8.0的密码管理

要全局建立密码重用策略,请使用 password_history和 password_reuse_interval系统变量。password_history定义了基于更改次数控制重复使用先前密码的全局策略。password_reuse_interval定义了基于经过的时间控制重复使用先前密码的全局策略。


►►►

密码验证策略


从 MySQL 8.0.13 开始,可以在密码更改时要求给出要替换的当前密码,这使 DBA 能够防止用户在没有证明他们知道当前密码的情况下更改密码。

运维日记丨MySQL8.0的密码管理

mysql.user的password_require_current字段可判断用户更改密码时是否需要验证当前密码。

  • 如果账户设置为PASSWORD REQUIRE CURRENT,密码更改必须指定当前密码。

  • 如果账户设置为PASSWORD REQUIRE CURRENT OPTIONAL,密码更改可以但不需要指定当前密码。

  • 如果账户设置为PASSWORD REQUIRE CURRENT DEFAULT,则password_require_current 系统变量确定账户需要验证的策略(password_require_current用于控制尝试更改账户密码是否必须指定要替换的当前密码)

注意:无论需要验证的策略如何,特权用户都可以更改任何账户密码而无需指定当前密码。


►►►

双密码支持


从 MySQL 8.0.14 开始,允许用户账户具有双密码,指定为主密码和辅助密码。使用双密码,可以更轻松地分阶段更改凭证,无需密切合作,也无需停机。具体步骤可以分为以下三步:

  1. 对于每个受影响的账户,在服务器上建立一个新的主密码,保留当前密码作为辅助密码。这使服务器能够识别每个账户的主密码或辅助密码,而应用程序可以继续使用与以前相同的密码(现在是辅助密码)连接到服务器。

  2. 在密码更改同步到所有服务器后,修改受影响账户的应用程序,让它们使用主密码来进行连接。

  3. 在所有应用程序从二级密码迁移到主密码后,二级密码不再需要,可以丢弃。在此更改同步到所有服务器后,只能使用每个账户的主密码进行连接。凭证更改现已完成。


►►►

随机密码生成


从MySQL 8.0.18开始,CREATE USER、ALTER USER和SET PASSWORD语句具有为用户账户生成随机密码的能力。

默认情况下,生成的随机密码长度为 20 个字符。该长度由generated_random_password_length系统变量控制, 范围从 5 到 255。

运维日记丨MySQL8.0的密码管理

对于生成随机密码的每个账户,语句将密码存储在 mysql.user系统表中。该语句还在结果集中的一行中返回明文密码,以使其可供执行该语句的用户或应用程序使用。


►►►

登录失败跟踪和临时账户锁定


从 MySQL 8.0.19 开始,管理员可以通过设置用户在连续登录失败过多后,账户临时锁定。“登录失败”在此上下文中意味着客户端在连接尝试期间未能提供正确的密码。它不包括由于未知用户或网络问题等原因导致连接失败。

运维日记丨MySQL8.0的密码管理

FAILED_LOGIN_ATTEMPTS设置是否开启账户登录失败跟踪。数字N指定导致临时账户锁定的连续错误密码的数量。

PASSWORD_LOCK_TIME设置在使用错误密码连续登录后锁定账户的时间。数字N用于指定账户保持锁定的天数,或者设置为UNBOUNDED,即当账户进入临时锁定状态时,该状态的持续时间是无界的,直到账户解锁才结束。

运维日记丨MySQL8.0的密码管理

一旦临时锁定开始,即使使用正确的密码也无法成功登录,直到锁定持续时间结束或账户被重置解锁。



美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。