---
title: "激活角色 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 激活角色 一个用户可以被授予多个角色。授予角色后，如果被授予的角色在会话中处于激活状态，则用户可以使用该角色所包含的权限；否则，用户无法使用该角色所包含的权限。如果需要确认当前会话中有哪些角色处于激活状态，可以使用 CURRENT_ROLE() 函数查询。 默认情况下，向其他用户或角色中授予的角色不会在会话中自动激活…
---
切换语言

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

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

# 激活角色

更新时间：2026-03-13 12:56:13

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/600.manage/500.security-and-permissions/300.access-control/200.user-and-permission/200.permission-of-mysql-mode/340.role-management-of-mysql-mode/500.activating-roles-of-mysql-mode.md)  

一个用户可以被授予多个角色。授予角色后，如果被授予的角色在会话中处于激活状态，则用户可以使用该角色所包含的权限；否则，用户无法使用该角色所包含的权限。如果需要确认当前会话中有哪些角色处于激活状态，可以使用 `CURRENT_ROLE()` 函数查询。

默认情况下，向其他用户或角色中授予的角色不会在会话中自动激活。

## 指定用户在登录时默认激活的角色

OceanBase 数据库的 MySQL 模式支持通过 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句的 `DEFAULT ROLE` 子句指定用户在登录时默认激活的角色。

### 前提条件

#### 注意

如果用户是为自身设置默认激活已经被授予的角色，则不需要任何权限。

- 当前用户必须拥有待指定的角色，才能执行本操作。
 - 当前用户还必须拥有 `CREATE USER` 权限，才可以执行 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句。

### 通过 `SET DEFAULT ROLE` 语句设置的操作示例

使用 `SET DEFAULT ROLE` 语句时，每条语句支持同时指定多个用户在登录时默认激活的角色。

- 指定用户 `test1` 在登录时，默认停用用户被授予的所有角色

  ```shell
  obclient [oceanbase]> SET DEFAULT ROLE NONE TO test1;

  ```

  如果需要指定多个用户，例如，指定用户 `test1` 和 `test2` 在登录时默认停用用户被授予的所有角色，示例如下：

  ```shell
  obclient [oceanbase]> SET DEFAULT ROLE NONE TO test1,test2;

  ```
 - 指定用户 `test1` 在登录时，默认激活用户被授予的所有角色

  ```shell
  obclient [oceanbase]> SET DEFAULT ROLE ALL TO test1;

  ```
 - 指定用户 `test1` 在登录时，默认激活用户被授予的 `employee` 和 `developer` 角色

  ```shell
  obclient [oceanbase]> SET DEFAULT ROLE employee,developer TO test1;

  ```

### 通过 `ALTER USER` 语句设置的操作示例

使用 `ALTER USER` 语句时，每条语句仅支持指定一个用户在登录时默认激活的角色。

  ```shell
  obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE NONE;

  ```shell
  obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE ALL;

  ```shell
  obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE employee,developer;

  ```

## 启用用户在登录时自动激活所有角色

除了上述激活角色的方式，拥有 `ALTER SYSTEM` 权限的用户还可以通过 Global 变量 `activate_all_roles_on_login` 启用登录时自动激活用户被授予的所有角色。该变量的默认值为 `off`，表示禁用在登录时自动激活用户被授予的所有角色。

设置该变量前，需要注意以下事项：

- 如果变量 `activate_all_roles_on_login` 值为 `on`，则该设置的优先级高于通过 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句指定的默认激活的角色，即系统将使用变量 `activate_all_roles_on_login` 的设置，在登录时默认自动激活用户被授予的所有角色。
 - 如果变量 `activate_all_roles_on_login` 值为 `off`，则系统将使用通过 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句指定的默认激活的角色。

启用在登录时自动激活用户被授予的所有角色的语句如下：

```shell
obclient [oceanbase]> SET GLOBAL activate_all_roles_on_login = on;

```

## 指定当前会话中激活的角色

OceanBase 数据库的 MySQL 模式支持在当前会话中通过 `SET ROLE` 语句指定激活当前登录用户被授予的角色。

#### 说明

通过 `SET ROLE` 语句激活的角色，仅影响当前 Session，不影响之后的 Session。

操作示例如下：

- 指定在当前会话中，保持默认角色的设置。

  ```shell
  obclient [oceanbase]> SET ROLE DEFAULT;

  ```

  语句执行后，系统会根据变量 `activate_all_roles_on_login` 的值以及 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句设置的默认激活的角色来激活角色：

     - 如果变量 `activate_all_roles_on_login` 的值为 `on`，则在会话中激活用户授予的所有角色。
     - 如果变量 `activate_all_roles_on_login` 的值为 `off`，则在会话中激活 `SET DEFAULT ROLE` 语句或 `ALTER USER` 语句指定的默认激活的角色。
 - 指定在当前会话中停用用户被授予的所有角色

  ```shell
  obclient [oceanbase]> SET ROLE NONE;

  ```
 - 指定在当前会话中激活用户被授予的所有角色

  ```shell
  obclient [oceanbase]> SET ROLE ALL;

  ```
 - 指定在当前会话中，激活用户被授予的角色中除了角色 `role1` 以外的其他所有角色

  ```shell
  obclient [oceanbase]> SET ROLE ALL EXCEPT role1;

  ```

  支持指定多个排除的角色。
 - 指定在当前会话中，激活用户的 `employee` 和 `developer` 角色

  ```shell
  obclient [oceanbase]> SET ROLE employee,developer;

  ```

## 相关文档

[查看角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480426)

 上一篇 下一篇 ![有帮助](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) 咨询热线
