vlambda博客
学习文章列表

MySQL 8 密码验证策略

密码验证策略使DBA能够防止用户在他们不知道当前密码的情况下更改密码。

这什么时候会发生?如果用户在没有注销的情况下离开终端会话,并且恶意用户使用打开的会话更改原始用户的 MySQL 密码,则可能会发生此类更改。可以想象,这可能会带来灾难性的后果:

·在管理员重置帐户密码之前,原始用户现在无法访问 MySQL。

·恶意用户可以访问 MySQL,可以实施密码重置,从而损害原始用户可以访问的任何数据。


账户级别的设置

密码确认策略可以全局指定,单独账户可以延迟全局策略,也可以针对单独账户进行设置,覆盖全局设置。

该策略是通过在执行create user、alter user命令时,指定password require选项来实现。

·如果账户被设置成password require current,那修改密码的话,必须要指定当前的密码

·如果账户被设置成password require current optional,修改密码的话,用户可以选择性地提供当前的密码,但不是必须

·如果账户被设置成password require current default,那全局参数password_require_current的值决定了是否对账户开启密码确认策略:

    (1)如果开启了password_require_current,修改密码的时候,必须指定当前的密码

    (2)如果没有开启password_require_current,修改密码的时候,是否指定当前的密码是可选的


如果账号设置不是password require current default,则帐户级别的设置优先于由password_require_current系统变量建立的全局策略。否则,帐户将遵循password_require_current设置。

缺省情况下,密码确认是可选的,默认的系统变量password_require_current是关闭的;创建的用户没有指定password require选项的话,默认就是使用password require current default。


结合password_require_current系统变量和每个账户自身的设置来决定是否开启密码确认功能。

账号设置 系统变量password_require_current的设置 修改密码是否需要当前密码
password require current OFF Yes
password require current ON Yes
password require current optional OFF No
password require current optional ON No
password require current default OFF No
password require current default ON Yes


比如,实现一个用户需求,修改密码时必须知道当前密码:

CREATE USER 'abce'@'localhost' PASSWORD REQUIRE CURRENT;
ALTER USER 'abce'@'localhost' PASSWORD REQUIRE CURRENT;

在账户级别指定后,会覆盖全局参数的设置。


全局设置

在配置文件中设置:

password_require_current = ON

对于运行中的实例,可以通过set设置:

mysql> SET PERSIST password_require_current = ON;


例外

特权用户可以修改任何账户的密码,而不需要指定当前的密码。

特权用户是指具有全局的create user、或具有update系统库mysql权限的任何用户。