---
title: "为用户指定生效或失效的角色 - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: 为用户指定生效或失效的角色 您可以根据需要指定用户生效或失效的角色。 一个用户可以被授予多个角色。授予角色后，您可以再设置这些角色中，哪些生效，哪些失效。用户将拥有生效角色的所有权限，用户不拥有失效角色中所包含的权限。 指定用户在登录时生效或失效的角色 OceanBase 数据库的 Oracle 模式支持通过 ALT…
---
切换语言

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

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

# 为用户指定生效或失效的角色

更新时间：2026-04-10 11:58:35

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.0/zh-CN/600.manage/500.security-and-permissions/300.access-control/200.user-and-permission/300.permission-of-oracle-mode/400.manage-roles-of-oracle-mode/500.specify-an-active-or-inactive-role-for-the-user-of-oracle-mode.md)  

您可以根据需要指定用户生效或失效的角色。

一个用户可以被授予多个角色。授予角色后，您可以再设置这些角色中，哪些生效，哪些失效。用户将拥有生效角色的所有权限，用户不拥有失效角色中所包含的权限。

## 指定用户在登录时生效或失效的角色

OceanBase 数据库的 Oracle 模式支持通过 `ALTER USER` 语句的 `DEFAULT ROLE` 子句指定其他用户在登录时生效或失效的角色。

### 前提条件

- 当前用户必须拥有被授予的角色，并且拥有 `GRANT OPTION` 权限，才能执行生效或失效角色操作。
 - 当前用户还必须拥有 `UPDATE USER`系统权限，才可以执行 `ALTER USER` 命令。

查看当前拥有权限的操作请参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642570)。如果您没有 `GRANT OPTION` 权限，请联系管理员为您添加，为用户添加权限的相关操作请参见 [修改用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642573)。查看当前拥有角色的操作请参见 [查看角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643200)。

### 注意事项

`DEFAULT ROLE` 子句仅支持指定通过 `GRANT` 语句直接授予用户的角色或由具有 `CREATE ROLE` 权限的用户创建的角色，不能通过 `DEFAULT ROLE` 子句指定以下角色：

- 未授予用户的角色

  不能指定生效或失效用户未被授予的角色，用户角色授权相关操作，请参见 [将角色授予用户](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643197)。
 - 通过其他角色授予的角色

  不能指定生效或失效通过其他角色授予的角色，将角色授予角色的相关操作，请参见 [将角色授予角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643194)。

### 生效或失效角色的语法

主要包含以下场景：

- 指定在登录时生效用户被授予的一个或多个角色

  SQL 语句如下：

  ```sql
  obclient> ALTER USER user_name DEFAULT ROLE role_name;

  ```
 - 指定在登录时生效用户被授予的所有角色

  SQL 语句如下：

  ```sql
  obclient> ALTER USER user_name DEFAULT ROLE ALL;

  ```
 - 指定在登录时生效用户被授予的部分角色

  SQL 语句如下：

  ```sql
  obclient> ALTER USER user_name DEFAULT ROLE ALL EXCEPT role_name;

  ```
 - 指定在登录时失效用户被授予的所有角色。

  SQL 语句如下：

  ```sql
  obclient>ALTER USER user_name DEFAULT ROLE NONE;

  ```

语句使用说明：

- `role_name`：角色名，多个角色名之间用英文逗号（,）分隔。
 - `ALL`：表示生效用户被授予的所有角色。
 - `EXCEPT` 子句表示除了 `EXCEPT` 子句中列出的角色除外，生效用户被授予的其他所有角色。多个角色名之间用英文逗号（,）分隔。
 - `NONE`：表示失效用户被授予的所有角色。

### 操作示例

指定在登录时生效用户被授予的角色 `role1`。

```sql
obclient>ALTER USER test DEFAULT ROLE role1;

```

更多 `ALTER USER` 语句的信息请参见 [ALTER USER](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643858)。

## 指定当前会话中生效或失效的角色

OceanBase 数据库的 Oracle 模式支持在当前会话中通过 `SET ROLE` 语句生效或失效当前登录用户被授予的角色。

#### 说明

通过 `SET ROLE` 语句生效或失效的角色，仅影响当前 Session，不影响之后的 Session。

主要使用场景如下：

- 指定在当前会话中生效当前登录用户被授予的一个或多个角色

  SQL 语句如下：

  ```sql
  obclient> SET ROLE role_name [ IDENTIFIED BY password ];

  ```
 - 指定在当前会话中生效当前登录用户被授予的所有角色

  SQL 语句如下：

  ```sql
  obclient> SET ROLE ALL;

  ```
 - 指定在当前会话中生效当前登录用户被授予的部分角色

  SQL 语句如下：

  ```sql
  obclient> SET ROLE ALL EXCEPT role_name;

  ```
 - 指定在当前会话中失效当前登录用户被授予的所有角色。

  SQL 语句如下：

  ```sql
  obclient> SET ROLE NONE;

  ```

语句使用说明：

- `role_name`：角色名，多个角色名之间用英文逗号（,）分隔。
 - `IDENTIFIED BY password`：指定生效角色的密码。如果在新建角色时，为该角色指定了密码，则您必须指定密码才能生效该角色。

  新建角色的相关操作及介绍请参见 [新建角色](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643196)。
 - `ALL`：表示在当前会话中，生效当前登录用户被授予的所有角色。

  #### 注意

  生效用户被授予的所有角色时，如果被授予的角色中有指定了密码的角色，系统将会报错。
 - `EXCEPT` 子句表示除了 `EXCEPT` 子句中列出的角色除外，生效当前登录用户被授予的其他所有角色。多个角色名之间用英文逗号（,）分隔。
 - `NONE`：表示失效当前登录用户被授予的所有角色。

示例：

- 指定在当前会话中生效由密码 `******` 标识的角色 `role1`。

  ```sql
  obclient> SET ROLE role1 IDENTIFIED BY ******;
  Query OK, 0 rows affected

  ```
 - 指定在当前会话中生效除了角色 `role2` 之外的所有角色。

  ```sql
  obclient> SET ROLE ALL EXCEPT role2;
  Query OK, 0 rows affected

  ```

更多 `SET ROLE` 语句的信息请参见 [SET ROLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000643836)。

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