---
title: "双密码管理 | OceanBase 文档中心"
description: 双密码管理 本文档介绍 MySQL 模式下双密码管理的配置方式、使用行为及相关示例。通过双密码管理功能，允许一个用户同时拥有两个有效密码，分别为主密码（Primary Password）和次密码（Secondary Password），主密码为当前生效的新密码，次密码为被保留的旧密码，两者可同时用于登录，称为双密码状…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库集中式版 - V 4.4.2

# 双密码管理

更新时间：2026-06-06 16:08:37

[编辑](https://github.com/oceanbase/oceanbase-database-standalone/edit/V4.4.2/zh-CN/600.manage/500.security-and-permissions/200.identification-and-authentication/100.identification-and-authentication-of-mysql-mode/400.dual-password-of-mysql-mode.md)  

本文档介绍 MySQL 模式下双密码管理的配置方式、使用行为及相关示例。通过双密码管理功能，允许一个用户同时拥有两个有效密码，分别为主密码（Primary Password）和次密码（Secondary Password），主密码为当前生效的新密码，次密码为被保留的旧密码，两者可同时用于登录，称为双密码状态。该功能可应用于配置切换期间仍可使用旧口令连接，降低一次性全量改密带来的断连风险。

#### 说明

本功能从 V4.4.2 BP1 版本开始支持。

## 语法

通过 `ALTER USER` 或 `SET PASSWORD` 语句可以修改用户密码并保留旧密码，进入双密码状态。

### 修改密码并保留当前密码

在设置新密码的同时保留原密码（新旧密码在一段时间内均可用于认证）：

```sql
ALTER USER 'user_name'@'host'
  IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;

```

- `user_name`、`host`：与创建用户时的账户名规则一致（例如 `'appuser'@'%'`）。
 - `new_password`：新密码明文（由服务端按插件策略存储）。

除 `ALTER USER` 外，`SET PASSWORD` 语句也可在赋值子句末尾加上 `RETAIN CURRENT PASSWORD`，效果与 `ALTER USER ... IDENTIFIED BY ... RETAIN CURRENT PASSWORD` 一致：

```sql
SET PASSWORD [FOR user] = PASSWORD('new_password') RETAIN CURRENT PASSWORD;

```

### 丢弃旧密码

在已完成新密码切换后，显式丢弃已保留的旧密码，仅保留当前密码：

```sql
ALTER USER 'user_name'@'host' DISCARD OLD PASSWORD;

```

执行成功后，旧密码不可再用于登录。

### 语法说明

- 除修改当前用户自身口令的场景外，执行 `ALTER USER` 通常需要具备 `CREATE USER` 等相应管理权限；权限要求与通用 `ALTER USER` 一致。
 - `ALTER USER` 场景下，`RETAIN CURRENT PASSWORD` 仅在与 `IDENTIFIED BY` 同时指定时有意义；用于表达本次改密进入双密码状态。`SET PASSWORD` 场景下则在 `=` 右侧密码选项之后追加该子句。
 - `DISCARD OLD PASSWORD` 用于在业务已全部切到新密码后，清理旧口令；若当前不存在有效旧密码，行为以报错提示为准。

## 示例

将用户 `appuser` 从任意主机连接的账户密码改为 `NewPass`，并保留改密前的旧密码：

```sql
obclient> ALTER USER 'appuser'@'%' IDENTIFIED BY 'NewPass' RETAIN CURRENT PASSWORD;

```

或使用 `SET PASSWORD`（效果等价）：

```sql
obclient> SET PASSWORD FOR 'appuser'@'%' = PASSWORD('NewPass') RETAIN CURRENT PASSWORD;

```

确认业务已切换至新密码后，丢弃旧密码：

```sql
obclient> ALTER USER 'appuser'@'%' DISCARD OLD PASSWORD;

```

## 功能维护

双密码相关信息会反映在系统表/视图中，便于审计与维护：

- [mysql.user](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005285029) 视图的 `user_attributes` 列的 `additional_password` 键存放与旧密码相关的属性，用于双密码场景。
 - [oceanbase.DBA_OB_USERS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005285161) 或 [oceanbase.CDB_OB_USERS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005284412) 视图的 `OLD_PASSWORD`、`OLD_PASSWORD_START_TIME` 列用于双密码场景。

## 相关文档

- [ALTER USER](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005286432)
 - [SET PASSWORD](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005286426)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
