首批通过分布式安全可靠测评,为关键业务系统打造
使用代理用户
更新时间:2026-07-01 12:56:49
OceanBase 数据库的 Oracle 模式支持代理用户功能。通过代理用户功能,一个用户 A(即代理用户)能够被授权代表其他用户 B(即目标用户)连接到数据库并使用用户 B 的角色权限执行数据库操作。
前提条件
执行 ALTER USER 命令的用户需要具备 ALTER USER 系统权限,查看权限的相关操作请参见 查看用户权限。如果对应用户没有 ALTER USER 系统权限,请联系管理员为其添加,为用户添加权限的相关操作请参见 直接授予权限。
背景信息
假设当前环境中有以下两个用户 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 版本)
授权代理用户
使用具有
ALTER USER权限的用户登录集群的 Oracle 租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -usys@oracletenant#obdemo -p*****执行以下语句,授权用户
USERA代理用户USERB。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的所有角色权限均生效obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA;授权用户
USERA代理用户USERB连接数据库时,仅用户USERB的employee角色生效obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE employee;授权用户
USERA代理用户USERB连接数据库时,用户USERB的所有角色均不生效obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH NO ROLE;授权用户
USERA代理用户USERB连接数据库时间,除了employee角色,用户USERB的其他角色均生效obclient [SYS]> ALTER USER USERB GRANT CONNECT THROUGH USERA WITH ROLE ALL EXCEPT employee;
执行成功后,退出连接。
使用用户
USERA代理登录用户USERB。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 连接数据库的示例如下:obclient -h10.xx.xx.xx -P2883 -uUSERA@oracletenant#obdemo -p***** --proxy_user USERB连接成功的信息如下:
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。其具备的权限是由授权时指定的权限。
撤销代理用户
使用具有
ALTER USER权限的用户登录集群的 Oracle 租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -usys@oracletenant#obdemo -p*****执行以下语句,撤销代理用户
USERA的代理权限。obclient [SYS]> ALTER USER USERB REVOKE CONNECT THROUGH USERA;