

# Aurora MySQL 中的密码策略和密码验证
<a name="AuroraMySQL.PasswordPolicies"></a>

**Topics**
+ [密码策略](#AuroraMySQL.PasswordPolicies.overview)
+ [使用 validate\_password 组件](#AuroraMySQL.PasswordPolicies.validate-password)
+ [相关文档](#AuroraMySQL.PasswordPolicies.related)

## 密码策略
<a name="AuroraMySQL.PasswordPolicies.overview"></a>

Aurora MySQL 支持以下 MySQL 密码策略功能。有关这些策略的更多信息，请参阅 [MySQL Password Management 文档](https://dev.mysql.com/doc/refman/8.4/en/password-management.html)。

### 密码到期
<a name="AuroraMySQL.PasswordPolicies.expiration"></a>


**密码到期参数**  

| 参数/子句 | 备注 | 
| --- | --- | 
| 集群参数 `default_password_lifetime` | 在 Aurora MySQL 版本 3（与 MySQL 8.0 兼容）及更高版本中可用。 | 
| 每账户 DCL 子句 `PASSWORD EXPIRE INTERVAL N DAY` | 无 | 
| 每账户 DCL 子句 `PASSWORD EXPIRE NEVER` | 无 | 
| 每账户 DCL 子句 `PASSWORD EXPIRE DEFAULT` | 无 | 
| 集群参数 `disconnect_on_expired_password` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 

### 密码重用限制
<a name="AuroraMySQL.PasswordPolicies.reuse"></a>


**密码重用限制参数**  

| 参数/子句 | 备注 | 
| --- | --- | 
| 集群参数 `password_history` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| 集群参数 `password_reuse_interval` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| 每账户 DCL 子句 `PASSWORD HISTORY N` | 无 | 
| 每账户 DCL 子句 `PASSWORD REUSE INTERVAL N DAY` | 无 | 
| 每账户 DCL 子句 `PASSWORD HISTORY DEFAULT` | 无 | 

### 当前密码验证
<a name="AuroraMySQL.PasswordPolicies.current-verification"></a>


**当前密码验证参数**  

| 参数/子句 | 备注 | 
| --- | --- | 
| 参数`password_require_current` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| 每账户 DCL 子句 `PASSWORD REQUIRE CURRENT` | 无 | 
| 每账户 DCL 子句 `PASSWORD REQUIRE CURRENT OPTIONAL` | 无 | 
| 每账户 DCL 子句 `PASSWORD REQUIRE CURRENT DEFAULT` | 无 | 

### 双密码支持
<a name="AuroraMySQL.PasswordPolicies.dual-password"></a>


**双密码支持子句**  

| 参数/子句 | 备注 | 
| --- | --- | 
| 每账户 DCL 子句 `RETAIN CURRENT PASSWORD` | 无 | 
| 每账户 DCL 子句 `DISCARD OLD PASSWORD` | 无 | 

### 失败登录跟踪和临时账户锁定
<a name="AuroraMySQL.PasswordPolicies.failed-login"></a>


**失败登录跟踪子句**  

| 参数/子句 | 备注 | 
| --- | --- | 
| 每账户 DCL 子句 `FAILED_LOGIN_ATTEMPTS N` | 无 | 
| 每账户 DCL 子句 `PASSWORD_LOCK_TIME N` | 无 | 
| 每账户 DCL 子句 `PASSWORD_LOCK_TIME UNBOUNDED` | 无 | 

## 使用 validate\_password 组件
<a name="AuroraMySQL.PasswordPolicies.validate-password"></a>

`validate_password` 组件是一个 MySQL 服务器组件，提供密码强度验证和强制执行功能。该组件根据可配置的规则测试密码，确保只有满足指定安全要求的密码才会被接受。

启用后，`validate_password` 组件将在以下过程中自动验证密码：
+ 用户账户创建（`CREATE USER`）
+ 密码更改（`ALTER USER`、`SET PASSWORD`）

这可以帮助企业确保其数据库用户维持了严格的密码规范，并遵守安全策略和监管要求。

Aurora MySQL 版本 8.4 提供了基于参数的方法来启用和管理 `validate_password` 组件，无需手动使用 `INSTALL COMPONENT` 和 `UNINSTALL COMPONENT` 命令。

### 启用 validate\_password 组件
<a name="AuroraMySQL.PasswordPolicies.validate-password.enabling"></a>

要在 Aurora MySQL 集群中启用密码验证，请使用集群参数：

参数名称: `aurora_enable_validate_password_component`

启用：在数据库集群参数组中，将 `aurora_enable_validate_password_component` 设置为 `true`（或 `1`）。

禁用：在数据库集群参数组中，将 `aurora_enable_validate_password_component` 设置为 `false`（或 `0`）。

**注意**  
对于 `validate_password` 组件，您无法使用 `INSTALL/UNINSTALL COMPONENT` 命令。

**注意**  
从 Aurora MySQL 版本 8.4 开始，`mysql.component` 表中未列出 `validate_password` 组件。您可以在数据库集群参数组中或通过全局变量 `aurora_enable_validate_password_component` 查看组件的状态：  

```
SELECT @@global.aurora_enable_validate_password_component;
```

### 支持的 validate\_password 组件参数
<a name="AuroraMySQL.PasswordPolicies.validate-password.parameters"></a>


**validate\_password 组件参数**  

| 参数名称 | 备注 | 
| --- | --- | 
| `validate_password.check_user_name` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| `validate_password.length` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| `validate_password.mixed_case_count` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| `validate_password.number_count` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 
| `validate_password.policy` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。仅支持 LOW 和 MEDIUM 级别。 | 
| `validate_password.special_char_count` | 在 Aurora MySQL 版本 8.4 及更高版本中可用。 | 

有关 MySQL validate\_password 参数的更多信息，请参阅 [MySQL Password Validation Options and Variables 文档](https://dev.mysql.com/doc/refman/8.4/en/validate-password-options-variables.html)。

### validate\_password 插件和组件从 RDS for MySQL 或 Aurora MySQL 版本 3 迁移到 Aurora MySQL 版本 8.4
<a name="AuroraMySQL.PasswordPolicies.validate-password.migration"></a>

从 Aurora MySQL 版本 8.4 开始，如果您之前使用 `INSTALL PLUGIN` 命令安装了 `validate_password` 插件，则可以启用参数 `aurora_enable_validate_password_component` 来迁移到 `validate_password` 组件，然后在写入器实例上通过 `UNINSTALL PLUGIN` 命令删除插件。

**注意**  
如果您已安装插件并启用了 `aurora_enable_validate_password_component` 参数，则 `validate_password` 组件将优先于插件。

如果您之前使用 `INSTALL COMPONENT 'file://component_validate_password'` 手动安装了 `validate_password` 组件，请确保升级时在目标数据库集群参数组中设置了 `aurora_enable_validate_password_component` 参数。升级后，该组件将不再在 `mysql.component` 表中列出。您可以使用 `aurora_enable_validate_password_component` 全局变量来验证组件的状态。

升级后首次启动数据库引擎时，如果您之前手动安装了该组件，则在 MySQL 错误日志中会看到以下消息：

```
Component 'file://component_validate_password' is being removed from mysql.component table.
validate_password component can be enabled/disabled through 'aurora_enable_validate_password_component' cluster parameter.
```

### 手动安装限制
<a name="AuroraMySQL.PasswordPolicies.validate-password.restrictions"></a>

从 Aurora MySQL 版本 8.4 发行版开始，不允许使用手动的 `validate_password` 组件安装和卸载命令：

```
mysql> INSTALL COMPONENT 'file://component_validate_password';
ERROR HY000: Cannot load component from specified URN: 'validate_password component can be
enabled/disabled through 'aurora_enable_validate_password_component' cluster parameter.'
```

### 监控组件状态
<a name="AuroraMySQL.PasswordPolicies.validate-password.monitoring"></a>

Aurora MySQL 将组件状态更改记录到 MySQL 错误日志中：

启用后：

```
Component 'validate_password' is enabled by parameter aurora_enable_validate_password_component
```

禁用后：

```
Component 'validate_password' is disabled by parameter aurora_enable_validate_password_component
```

### 密码验证对主用户密码的影响
<a name="AuroraMySQL.PasswordPolicies.validate-password.master-user"></a>

通过 `modify-db-cluster` API 重置主用户密码时，如果新密码不符合所配置的密码验证规则，Aurora MySQL 将发出一个对客户可见的事件来指示出现问题，并且您必须使用合规密码重试该操作。

### 密码验证对 Amazon RDS 管理的主用户密码的影响
<a name="AuroraMySQL.PasswordPolicies.validate-password.managed-password"></a>

如果集群使用 Amazon RDS 托管的主用户凭证且凭证存储在 AWS Secrets Manager 中，并且轮换期间自动生成的密码不符合配置的验证要求，则轮换将失败。您需要调整密码验证参数以便使轮换成功。建议不要同时使用 `validate_password` 组件和托管的主用户密码。

## 相关文档
<a name="AuroraMySQL.PasswordPolicies.related"></a>
+ [Aurora MySQL 配置参数](AuroraMySQL.Reference.ParameterGroups.md)
+ [使用 Amazon Aurora MySQL 实现高安全性](AuroraMySQL.Security.md)
+ [MySQL validate\_password Component 文档](https://dev.mysql.com/doc/refman/8.4/en/validate-password.html)
+ [Amazon Aurora 的参数组](USER_WorkingWithParamGroups.md)