首批通过分布式安全可靠测评,为关键业务系统打造
proxyro 用户的密码信息都保存在哪里
更新时间:2026-06-10 01:56
proxyro (Proxy Read Only) 账号是 OceanBase 集群 sys 租户下的一个只读用户,拥有 OceanBase 数据库下所有虚拟表和视图的只读权限。通过 OCP Web 界面创建的每个业务 OceanBase 集群都会自动在 sys 租户下创建一个 proxyro 用户,通过 OCP Web 界面执行业务 OceanBase 集群的运维操作以及通过 OBProxy 连接到 OceanBase 集群的 sys 租户或普通租户时,均会使用到 proxyro 用户。 本文主要介绍了在 OCP、OceanBase 集群、OBProxy 集群中都会用到的 proxyro 用户的密码信息分别保存在哪些地方,以及对应的更新和管理机制。
详细说明
业务 OceanBase 集群的 sys 租户下的 ocp.ops_config 表中
这张 ocp.ops_config 表中的信息主要是 OCP 用来接管 OceanBase 集群的时候才会被用到(主要是为了接管 OceanBase 集群的时候,OCP 能知道这个 OceanBase 集群的 proxyro 密码明文是多少)。如果去 OCP 页面上的 sys 租户下的用户管理界面修改 proxyro 密码,ocp.ops_config 中的数据会自动跟着同步更新,但是修改 OCP 密码箱中的 proxyro 密码是不会自动更新这张 ocp.ops_config 表的。
MySQL [ocp]> SELECT name, value FROM `ocp`.`ops_config` WHERE name = 'ob.proxyro.password';
MySQL [ocp]> select * from ops_config\G
*************************** 1. row ***************************
id: 1000001
name: ob.proxyro.password
value: 4612449b676c52449e805b73cbe9a614
create_time: 2024-03-17 11:00:06
update_time: 2024-03-17 11:00:06
1 row in set (0.002 sec)
MySQL [ocp]> SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ocp' AND TABLE_NAME = 'ops_config';
MySQL [ocp]> REPLACE INTO `ocp`.`ops_config` (`name`, `value`) values ('ob.proxyro.password', 'b7c560025ab1774bcfc4a0ce5d431078');
注意
上面的这张 ocp.ops_config 是在业务 OceanBase 集群的 sys 租户下的,不在 ocp_meta 元数据库中。
业务 OceanBase 集群的 sys 租户下的 mysql.user 表中
MySQL [oceanbase]> select * from mysql.user;
MySQL [oceanbase]> alter user proxyro identified by "xxx"; // 强烈建议不要去这样黑屏修改 proxyro 用户的命令,因为这样真的只是修改了 mysql.user 表,其它都不会自动连带修改。
OCP 的密码箱(现在叫凭据管理)中(底层对应 OCP 元数据库的 ocp.profile_credential)

这边本质上只是一个验证和修改 ocp.profile_credentail 中 proxyro 用户密码的入口,用于验证的密码信息是 OCP 进程启动时从 ocp.profile_credential 表中读出来的,修改密码时会先自动验证下是否可以通过新密码成功连接到 proxyro@sys 。
MySQL [ocp]> select * from profile_credential;
MySQL [ocp]> select * from profile_credential where secret like '%proxyro%';
OCP 容器内置的富客户端模式的 OBProxy 的 proxy_config 配置表中
从 OCP V4.0.2 版本(含)开始,OCP 容器中已经没有内置的 OBProxy 进程 2888 端口了,取而代之的是 OB-JDBC 富客户端模式的 OBProxy 。
这个 proxy_config 配置表中的 proxyro 用户密码信息应该是从 OCP 元数据库的 ocp.profile_crdential 表中读取到内存中来的,并且只在 OCP 进程启动时读取一次,后续如果 OCP 进程不重启,是不会再次读取的,支持通过 replace into proxy_config … 来进行修改。
示例如下。
如何查询:
[root@ocp ~]# docker exec -it ocp bash [root@ocp admin]# obclient -S /home/admin/.obproxy/obproxy.domain -uroot@proxysys -pxxx obclient [(none)]> select * from proxy_config where name like '%password%';如何修改:
obclient [(none)]> replace into proxy_config(cluster_name, name, value, config_level) values ('OceanBase 集群名', 'observer_sys_password', 'xxx', 'LEVEL_CLUSTER');
业务 OBProxy 集群的 proxy_config 配置表中
这个 proxy_config 配置表中的 proxyro 用户密码信息应该是从 /etc/obproxy_config.bin 配置文件中读取到内存中来的,并且只在 OBProxy 进程启动时读取一次,支持通过 replace into proxy_config … 来动态修改。
$ mysql -h127.1 -uroot@proxysys -P2883 -pxxx
MySQL [(none)]> replace into proxy_config(cluster_name, name, value, config_level) values ('业务 OceanBase 集群名', 'observer_sys_password', 'xxx', 'LEVEL_CLUSTER');
MySQL [(none)]> select * from proxy_config where name like '%password%';
如何修改业务 OceanBase 集群 proxyro 用户的密码
OCP Web 界面上业务 OceanBase 集群的 sys 租户下的【用户管理】页面提供了修改 proxyro 用户密码的入口(底层对应 sys 租户的 mysql.user表),该密码底层对应业务 OceanBase 集群的 sys 租户下的 mysql.user 表中的 proxyro 用户密码,通过 OCP Web 界面修改 proxyro 用户密码的话,会自动更新 sys 租户的 mysql.user 表以及 ocp.ops_config 表。但是反过来不会。
如果更新该密码时遇到报错:current proxyro password is not match given password.

是因为修改 OCP 容器使用的富客户端模式的 proxyro 密码时,发现富客户端记录的 proxyro 密码和当前 OCP 密码箱中的密码不一致,所以拒绝了修改。需要检查下是不是之前黑屏修改过 sys 租户下 proxyro 用户的密码,或者把密码箱给改坏了。
通过 OCP 上的这个界面修改 proxyro 用户密码的话,会自动连带修改 sys 租户 mysql.user 表中的 proxyro 密码、sys 租户的 ocp.ops_config 表中的 proxyro 密码、OCP 密码箱中的 proxyro 密码(底层对应 OCP 元数据库的 ocp.profile_credential 表)。因此,推荐使用这样的方式来修改 proxyro 用户的密码。
说明
- 这边不会自动修改 OCP 容器内置的富客户端模式的 OBProxy 的
proxy_config配置表中 proxyro 的密码,需要重启下 OCP 容器才能生效。 - 这边也不会自动修改业务 OceanBase 集群关联的 OBProxy 集群的
proxy_config配置表中 proxyro 账号信息,需要先将 OBProxy 和 OceanBase 集群解除绑定后再重新关联一下来自动更新该账户信息。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本。
OBProxy 集群 V4.x 版本。
OCP 白屏工具 V3.x、V4.x 版本。