---
title: "使用代理用户 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 使用代理用户 OceanBase 数据库的 Oracle 模式支持代理用户功能。通过代理用户功能，一个用户 A（即代理用户）能够被授权代表其他用户 B（即目标用户）连接到数据库并使用用户 B 的角色权限执行数据库操作。 前提条件 执行 ALTER USER 命令的用户需要具备 ALTER USER 系统权限，查看权限…
---
切换语言

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

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

# 使用代理用户

更新时间：2025-12-08 20:53:10

[编辑](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/300.permission-of-oracle-mode/710.set-proxy-user-for-a-user-of-oracle-mode.md)  

OceanBase 数据库的 Oracle 模式支持代理用户功能。通过代理用户功能，一个用户 A（即代理用户）能够被授权代表其他用户 B（即目标用户）连接到数据库并使用用户 B 的角色权限执行数据库操作。

## 前提条件

执行 `ALTER USER` 命令的用户需要具备 `ALTER USER` 系统权限，查看权限的相关操作请参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479232)。如果对应用户没有 `ALTER USER` 系统权限，请联系管理员为其添加，为用户添加权限的相关操作请参见 [直接授予权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479231)。

## 背景信息

假设当前环境中有以下两个用户 `USERA` 和 `USERB`，用户 `USERB` 拥有 `emplyee` 和 `developer` 两个角色权限，现在需要授权用户 `USERA` 作为用户 `USERB` 的代理用户。

## 注意事项

使用代理用户代理目标用户连接数据库时，当前支持通过 OBClient、Java 驱动（OceanBase Connector/J）和 C 驱动（OBCI）连接数据库，各产品的版本要求如下：

- OBClient： V2.2.6 及之后版本
 - OceanBase Connector/J：V2.4.10 及之后版本
 - OBCI：V2.0.9 及之后版本（不包含 V2.1.0 版本）

## 授权代理用户

1. 使用具有 `ALTER USER` 权限的用户登录集群的 Oracle 租户。

   连接示例如下，连接数据库时请以实际环境为准。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -usys@oracletenant#obdemo -p*****

   ```
 2. 执行以下语句，授权用户 `USERA` 代理用户 `USERB`。

   ```sql
   ALTER USER user_name GRANT CONNECT THROUGH proxy_user_name [with_clause];

   with_clause:
      {
          WITH ROLE {role_name[, role_name,...]}
        | WITH NO ROLE
        | WITH ROLE ALL EXCEPT {role_name[, role_name,...]}
      }

   ```

   相关参数说明如下：

      - `user_name`：被代理的目标用户名。
      - `proxy_user_name`：代理用户名。授权后，该用户能代表目标用户连接数据库，并使用目标用户的角色权限执行数据库操作。
      - `with_clause`：指定代理用户代理目标用户连接数据库时生效的角色权限。如果不指定该子句，则默认代理用户代理目标用户连接数据库时，目标用户的所有角色权限均生效。

       #### 注意

       指定代理用户生效的角色权限时，对于带密码的角色权限，需要在连接数据库后手动通过 `SET ROLE role_name IDENTIFIED BY role_password;` 命令激活该角色。

            - `WITH ROLE {role_name[, role_name,...]}`：指定代理用户代理目标用户连接数据库时，自动获取并激活指定的角色权限，即仅生效目标用户中指定的角色权限。
            - `WITH NO ROLE`：指定代理用户代理目标用户连接数据库时，不会自动获取目标用户的任何角色权限，即目标用户的所有角色权限均不生效。
            - `WITH ROLE ALL EXCEPT {role_name[ ,role_name,...]}`：指定代理用户代理目标用户连接数据库时，自动获取并激活目标用户中除指定角色之外的其他所有角色权限。

   示例如下：

      - 授权用户 `USERA` 代理用户 `USERB` 连接数据库时，用户 `USERB` 的所有角色权限均生效

       ```shell
       obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA;

       ```
      - 授权用户 `USERA` 代理用户 `USERB` 连接数据库时，仅用户 `USERB` 的 `employee` 角色生效

       ```shell
       obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE employee;

       ```
      - 授权用户 `USERA` 代理用户 `USERB` 连接数据库时，用户 `USERB` 的所有角色均不生效

       ```shell
       obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH NO ROLE;

       ```
      - 授权用户 `USERA` 代理用户 `USERB` 连接数据库时间，除了 `employee` 角色，用户 `USERB` 的其他角色均生效

       ```shell
       obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE ALL EXCEPT employee;

       ```
 3. 执行成功后，退出连接。
 4. 使用用户 `USERA` 代理登录用户 `USERB`。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -uproxy_user_connection -p***** --proxy_user[=]user_name

   ```

   相关参数说明如下：

      - `-h`：该参数用于指定 OceanBase 数据库的连接 IP。通过 ODP 方式连接时，此处为 ODP 地址；通过直接方式连接时，则是某个 OBServer 节点的 IP 地址。
      - `-P`：该参数用于指定 OceanBase 数据库的连接端口。通过 ODP 方式连接时，此处为 ODP 的监听端口，默认是 2883，在部署 ODP 时可自定义；通过直接方式连接时，则是对应 OBServer 节点的 SQL 端口，默认是 2881，在部署 OceanBase 数据库时可自定义。
      - `-u`：该参数用于指定代理用户的连接信息。通过 ODP 方式连接时，格式为 `代理用户名@租户名#集群名`、`集群名:租户名:代理用户名`、`集群名-租户名-代理用户名` 或者 `集群名.租户名.代理用户名`；通过直连方式连接时，格式为 `代理用户名@租户名`。
      - `-p`：该参数用于指定代理用户的连接密码。本示例中，此处为用户 `USERA` 的连接密码。
      - `--proxy_user`：该参数指定被代理的用户名，即目标用户名。本示例中，此处为用户 `USERB`。

   使用 `USERA` 代理 `USERB` 通过 OBClient 连接数据库的示例如下：

   ```shell
   obclient -h10.xx.xx.xx -P2883 -uUSERA@oracletenant#obdemo -p***** --proxy_user USERB

   ```

   连接成功的信息如下：

   ```shell
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 3221487643
   Server version: OceanBase 4.3.2.0 (r200000272024061717-93c0ed73ebbcac6edbf7b585860b75d825935358) (Built Jun 17 2024 18:06:04)

   Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   obclient [USERB]>

   ```

   从连接信息中可知，目前显示连接的用户为 `USERB`。其具备的权限是由授权时指定的权限。

## 撤销代理用户

1. 使用具有 `ALTER USER` 权限的用户登录集群的 Oracle 租户。

   ```
 2. 执行以下语句，撤销代理用户 `USERA` 的代理权限。

   ```shell
   obclient [SYS]> ALTER USER USERB REVOKE CONNECT THROUGH USERA;

   ```

## 相关文档

- [ALTER USER](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480914)
 - [OceanBase 数据库连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476144)

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