#### 6.4.3.2 密码验证选项和变量

[](<>)

本节描述了系统和状态变量，`验证密码`提供以使其操作能够被配置和监控。

-   [密码验证组件系统变量](validate-password-options-variables.html#validate-password-system-variables)

-   [密码验证组件状态变量](validate-password-options-variables.html#validate-password-status-variables)

-   [密码验证插件选项](validate-password-options-variables.html#validate-password-plugin-options)

-   [密码验证插件系统变量](validate-password-options-variables.html#validate-password-plugin-system-variables)

-   [密码验证插件状态变量](validate-password-options-variables.html#validate-password-plugin-status-variables)

##### 密码验证组件系统变量

[](<>)

如果`验证密码`组件已启用，它公开了几个启用密码检查配置的系统变量：

```
mysql> SHOW VARIABLES LIKE 'validate_password.%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
```

要更改密码检查方式，您可以在服务器启动或运行时设置这些系统变量。下面的列表描述了每个变量的含义。

-   [](<>) [`validate_password.check_user_name`](validate-password-options-variables.html#sysvar_validate_password.check_user_name)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.check-user-name[={OFF|ON}]` |
    | ----- | ------------------------------------------------ |
    | 系统变量 | `[validate_password.check_user_name](validate-password-options-variables.html#sysvar_validate_password.check_user_name)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在` |

    无论`验证密码`将密码与当前会话的有效用户帐户的用户名部分进行比较，如果匹配则拒绝它们。此变量不可用，除非`验证密码`已安装。

    默认，[`validate_password.check_user_name`](validate-password-options-variables.html#sysvar_validate_password.check_user_name)已启用。此变量控制用户名匹配，与[`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy).

    什么时候[`validate_password.check_user_name`](validate-password-options-variables.html#sysvar_validate_password.check_user_name)启用后，它具有以下效果：

    -   检查发生在所有上下文中`验证密码`被调用，其中包括使用语句，例如[`更改用户`](alter-user.html)要么[`设置密码`](set-password.html)更改当前用户的密码，并调用诸如[`VALIDATE_PASSWORD_STRENGTH()`](encryption-functions.html#function_validate-password-strength).

    -   用于比较的用户名取自[`用户（）`](information-functions.html#function_user)和[`当前用户（）`](information-functions.html#function_current-user)当前会话的功能。这意味着有足够权限设置另一个用户的密码的用户可以将密码设置为该用户的名称，而不能将该用户的密码设置为执行该语句的用户的名称。例如，`'根'@'本地主机'`可以设置密码`'杰弗里'@'本地主机'`到`'杰弗里'`，但不能将密码设置为`'根`.

    -   只有用户名部分[`用户（）`](information-functions.html#function_user)和[`当前用户（）`](information-functions.html#function_current-user)使用函数值，而不是主机名部分。如果用户名为空，则不进行比较。

    -   如果密码与用户名相同或相反，则会发生匹配并拒绝密码。

    -   用户名匹配区分大小写。密码和用户名值作为二进制字符串逐字节进行比较。

    -   如果密码与用户名匹配，[`VALIDATE_PASSWORD_STRENGTH()`](encryption-functions.html#function_validate-password-strength)返回 0 而不管其他`验证密码`设置系统变量。

-   [](<>) [`validate_password.dictionary_file`](validate-password-options-variables.html#sysvar_validate_password.dictionary_file)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.dictionary-file=file_name` |
    | ----- | ----------------------------------------------- |
    | 系统变量 | `[validate_password.dictionary_file](validate-password-options-variables.html#sysvar_validate_password.dictionary_file)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 文件名 |

    字典文件的路径名`验证密码`用于检查密码。此变量不可用，除非`验证密码`已安装。

    默认情况下，此变量具有空值并且不执行字典检查。要进行字典检查，变量值必须为非空。如果文件以相对路径命名，则相对于服务器数据目录进行解释。文件内容应为小写，每行一个字。内容被视为具有字符集`utf8`.允许的最大文件大小为 1MB。

    对于密码检查期间要使用的字典文件，密码策略必须设置为 2 (`强的`);见描述[`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)系统变量。假设这是真的，长度为 4 到 100 的密码的每个子字符串都会与字典文件中的单词进行比较。任何匹配都会导致密码被拒绝。比较不区分大小写。

    为了[`VALIDATE_PASSWORD_STRENGTH()`](encryption-functions.html#function_validate-password-strength), 根据所有策略检查密码，包括`强的`，所以强度评估包括字典检查，而不管[`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)价值。

    [`validate_password.dictionary_file`](validate-password-options-variables.html#sysvar_validate_password.dictionary_file)可以在运行时设置并分配一个值会导致在不重新启动服务器的情况下读取命名文件。

-   [](<>) [`validate_password.length`](validate-password-options-variables.html#sysvar_validate_password.length)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.length=#` |
    | ----- | ------------------------------ |
    | 系统变量 | `[validate_password.length](validate-password-options-variables.html#sysvar_validate_password.length)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `8` |
    | 最小值 | `0` |

    最小字符数`验证密码`需要密码才能拥有。此变量不可用，除非`验证密码`已安装。

    这[`validate_password.length`](validate-password-options-variables.html#sysvar_validate_password.length)最小值是其他几个相关系统变量的函数。该值不能设置为小于此表达式的值：

    ```
    validate_password.number_count
    + validate_password.special_char_count
    + (2 * validate_password.mixed_case_count)
    ```

    如果`验证密码`调整值[`validate_password.length`](validate-password-options-variables.html#sysvar_validate_password.length)由于前面的约束，它会将消息写入错误日志。

-   [](<>) [`validate_password.mixed_case_count`](validate-password-options-variables.html#sysvar_validate_password.mixed_case_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.mixed-case-count=#` |
    | ----- | ---------------------------------------- |
    | 系统变量 | `[validate_password.mixed_case_count](validate-password-options-variables.html#sysvar_validate_password.mixed_case_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    小写和大写字符的最小数量`验证密码`如果密码策略是，则需要密码`中等的`或更强。此变量不可用，除非`验证密码`已安装。

    对于给定的[`validate_password.mixed_case_count`](validate-password-options-variables.html#sysvar_validate_password.mixed_case_count)值，密码必须有那么多小写字符和那么多大写字符。

-   [](<>) [`validate_password.number_count`](validate-password-options-variables.html#sysvar_validate_password.number_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.number-count=#` |
    | ----- | ------------------------------------ |
    | 系统变量 | `[validate_password.number_count](validate-password-options-variables.html#sysvar_validate_password.number_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    最小的数字（数字）字符数`验证密码`如果密码策略是，则需要密码`中等的`或更强。此变量不可用，除非`验证密码`已安装。

-   [](<>) [`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.policy=值` |
    | ----- | ------------------------------ |
    | 系统变量 | `[validate_password.policy](validate-password-options-variables.html#sysvar_validate_password.policy)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 枚举 |
    | 默认值 | `1` |
    | 有效值 | `0`<br/><br/>`1`<br/><br/>`2` |

    密码策略由`验证密码`.此变量不可用，除非`验证密码`已安装。

    [`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)影响如何`验证密码`使用它的其他策略设置系统变量，除了根据用户名检查密码，这由独立控制[`validate_password.check_user_name`](validate-password-options-variables.html#sysvar_validate_password.check_user_name).

    这[`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)可以使用数值 0、1、2 或相应的符号值指定值`低的`,`中等的`,`强的`.下表描述了为每个策略执行的测试。对于长度测试，所需的长度是[`validate_password.length`](validate-password-options-variables.html#sysvar_validate_password.length)系统变量。同样，其他测试所需的值由其他`验证密码。*`xxx`*`变量。

    | 政策 | 进行的测试 |
    | --- | ----- |
    | `0`要么`低的` | 长度 |
    | `1`要么`中等的` | 长度;数字、小写/大写和特殊字符 |
    | `2`要么`强的` | 长度;数字、小写/大写和特殊字符；字典文件 |

-   [](<>) [`validate_password.special_char_count`](validate-password-options-variables.html#sysvar_validate_password.special_char_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password.special-char-count=#` |
    | ----- | ------------------------------------------ |
    | 系统变量 | `[validate_password.special_char_count](validate-password-options-variables.html#sysvar_validate_password.special_char_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    非字母数字字符的最小数量`验证密码`如果密码策略是，则需要密码`中等的`或更强。此变量不可用，除非`验证密码`已安装。

##### 密码验证组件状态变量

[](<>)

如果`验证密码`启用组件时，它会公开提供操作信息的状态变量：

```
mysql> SHOW STATUS LIKE 'validate_password.%';
+-----------------------------------------------+---------------------+
| Variable_name                                 | Value               |
+-----------------------------------------------+---------------------+
| validate_password.dictionary_file_last_parsed | 2019-10-03 08:33:49 |
| validate_password.dictionary_file_words_count | 1902                |
+-----------------------------------------------+---------------------+
```

下面的列表描述了每个状态变量的含义。

-   [](<>) [`validate_password.dictionary_file_last_parsed`](validate-password-options-variables.html#statvar_validate_password.dictionary_file_last_parsed)

    [](<>)[](<>)

    上次解析字典文件的时间。此变量不可用，除非`验证密码`已安装。

-   [](<>) [`validate_password.dictionary_file_words_count`](validate-password-options-variables.html#statvar_validate_password.dictionary_file_words_count)

    [](<>)[](<>)

    从字典文件中读取的单词数。此变量不可用，除非`验证密码`已安装。

##### 密码验证插件选项

[](<>)

笔记

在 MySQL 8.0 中，`验证密码`插件被重新实现为`验证密码`零件。这`验证密码`插件已弃用；希望它在 MySQL 的未来版本中被删除。因此，它的选项也被弃用了，您应该期望它们也被删除。使用该插件的 MySQL 安装应该转换为使用该组件。看[第 6.4.3.3 节，“转换到密码验证组件”](validate-password-transitioning.html).

控制激活`验证密码`插件，使用此选项：

-   [](<>) [`--验证密码[=*`价值`*]`](validate-password-options-variables.html#option_mysqld_validate-password)

    [](<>)[](<>)

    | 命令行格式 | `--验证密码[=值]` |
    | ----- | ------------ |
    | 类型 | 枚举 |
    | 默认值 | `在` |
    | 有效值 | `在`<br/><br/>`离开`<br/><br/>`力量`<br/><br/>`FORCE_PLUS_PERMANENT` |

    此选项控制服务器如何加载已弃用的`验证密码`启动时的插件。该值应该是可用于插件加载选项的值之一，如中所述[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).例如，[`--validate-password=FORCE_PLUS_PERMANENT`](validate-password-options-variables.html#option_mysqld_validate-password)告诉服务器在启动时加载插件，并防止在服务器运行时将其删除。

    此选项仅在以下情况下可用`验证密码`插件之前已注册[`安装插件`](install-plugin.html)或装有[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add).看[第 6.4.3.1 节，“密码验证组件安装和卸载”](validate-password-installation.html).

##### 密码验证插件系统变量

[](<>)

笔记

在 MySQL 8.0 中，`验证密码`插件被重新实现为`验证密码`零件。这`验证密码`插件已弃用；希望它在 MySQL 的未来版本中被删除。因此，它的系统变量也被弃用了，您应该期望它们也被删除。使用相应的系统变量`验证密码`组件代替；看[密码验证组件系统变量](validate-password-options-variables.html#validate-password-system-variables).使用该插件的 MySQL 安装应该转换为使用该组件。看[第 6.4.3.3 节，“转换到密码验证组件”](validate-password-transitioning.html).

-   [](<>) [`validate_password_check_user_name`](validate-password-options-variables.html#sysvar_validate_password_check_user_name)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-check-user-name[={OFF|ON}]` |
    | ----- | ------------------------------------------------ |
    | 系统变量 | `[validate_password_check_user_name](validate-password-options-variables.html#sysvar_validate_password_check_user_name)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.check_user_name`](validate-password-options-variables.html#sysvar_validate_password.check_user_name)系统变量`验证密码`组件代替。

-   [](<>) [`validate_password_dictionary_file`](validate-password-options-variables.html#sysvar_validate_password_dictionary_file)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-dictionary-file=file_name` |
    | ----- | ----------------------------------------------- |
    | 系统变量 | `[validate_password_dictionary_file](validate-password-options-variables.html#sysvar_validate_password_dictionary_file)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 文件名 |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.dictionary_file`](validate-password-options-variables.html#sysvar_validate_password.dictionary_file)系统变量`验证密码`组件代替。

-   [](<>) [`验证密码长度`](validate-password-options-variables.html#sysvar_validate_password_length)

    [](<>)[](<>)

    | 命令行格式 | `--验证密码长度=#` |
    | ----- | ------------ |
    | 系统变量 | `[validate_password_length](validate-password-options-variables.html#sysvar_validate_password_length)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `8` |
    | 最小值 | `0` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.length`](validate-password-options-variables.html#sysvar_validate_password.length)系统变量`验证密码`组件代替。

-   [](<>) [`validate_password_mixed_case_count`](validate-password-options-variables.html#sysvar_validate_password_mixed_case_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-mixed-case-count=#` |
    | ----- | ---------------------------------------- |
    | 系统变量 | `[validate_password_mixed_case_count](validate-password-options-variables.html#sysvar_validate_password_mixed_case_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.mixed_case_count`](validate-password-options-variables.html#sysvar_validate_password.mixed_case_count)系统变量`验证密码`组件代替。

-   [](<>) [`validate_password_number_count`](validate-password-options-variables.html#sysvar_validate_password_number_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-number-count=#` |
    | ----- | ------------------------------------ |
    | 系统变量 | `[validate_password_number_count](validate-password-options-variables.html#sysvar_validate_password_number_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.number_count`](validate-password-options-variables.html#sysvar_validate_password.number_count)系统变量`验证密码`组件代替。

-   [](<>) [`validate_password_policy`](validate-password-options-variables.html#sysvar_validate_password_policy)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-policy=值` |
    | ----- | ------------------------------ |
    | 系统变量 | `[validate_password_policy](validate-password-options-variables.html#sysvar_validate_password_policy)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 枚举 |
    | 默认值 | `1` |
    | 有效值 | `0`<br/><br/>`1`<br/><br/>`2` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.policy`](validate-password-options-variables.html#sysvar_validate_password.policy)系统变量`验证密码`组件代替。

-   [](<>) [`validate_password_special_char_count`](validate-password-options-variables.html#sysvar_validate_password_special_char_count)

    [](<>)[](<>)

    | 命令行格式 | `--validate-password-special-char-count=#` |
    | ----- | ------------------------------------------ |
    | 系统变量 | `[validate_password_special_char_count](validate-password-options-variables.html#sysvar_validate_password_special_char_count)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1` |
    | 最小值 | `0` |

    这`验证密码`插件系统变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.special_char_count`](validate-password-options-variables.html#sysvar_validate_password.special_char_count)系统变量`验证密码`组件代替。

##### 密码验证插件状态变量

[](<>)

笔记

在 MySQL 8.0 中，`验证密码`插件被重新实现为`验证密码`零件。这`验证密码`插件已弃用；希望它在 MySQL 的未来版本中被删除。因此，它的状态变量也被弃用了；期望它被删除。使用相应的状态变量`验证密码`零件;看[密码验证组件状态变量](validate-password-options-variables.html#validate-password-status-variables).使用该插件的 MySQL 安装应该转换为使用该组件。看[第 6.4.3.3 节，“转换到密码验证组件”](validate-password-transitioning.html).

-   [](<>) [`validate_password_dictionary_file_last_parsed`](validate-password-options-variables.html#statvar_validate_password_dictionary_file_last_parsed)

    [](<>)[](<>)

    这`验证密码`插件状态变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.dictionary_file_last_parsed`](validate-password-options-variables.html#statvar_validate_password.dictionary_file_last_parsed)状态变量`验证密码`组件代替。

-   [](<>) [`validate_password_dictionary_file_words_count`](validate-password-options-variables.html#statvar_validate_password_dictionary_file_words_count)

    [](<>)[](<>)

    这`验证密码`插件状态变量已弃用；希望它在 MySQL 的未来版本中被删除。使用对应的[`validate_password.dictionary_file_words_count`](validate-password-options-variables.html#statvar_validate_password.dictionary_file_words_count)状态变量`验证密码`组件代替。
