问题现象
使用 resource/public/connect 这三个关键字作为用户名,对用户设置密码时,会触发 OBServer core。
正确的情况下,程序应该报错,并显示提示 user resource does not exist。而不是导致 OBServer core。
obclient> ALTER USER resource IDENTIFIED BY ******;
ERROR-02013: Lost connection to MySQL server during query
关键诊断信息
触发条件
使用 resource/public/connect 这三个关键字作为用户名,对用户设置密码。
问题原因
由于 resource/public/connect 是 OceanBase 数据库的关键字,语法解析时并没有将这三个解析为字符串类型的用户名,而是作为关键字进行了解析。在程序中做语法树解析时,调用空指针踩内存,导致 core。
问题的风险及影响
该问题出现几率不大。出现时会引起 core,重启可以解决。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响的版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法及规避方式
解决方法:
升级 OceanBase 数据库至企业版 V2.2.77 BP14(oceanbase-2.2.77-114000072022120410)及之后版本、V3.1.2 BP11(oceanbase-3.1.2-111000052023010412)及之后版本、V3.2.3 BP7(oceanbase-3.2.3.3-107000092023011911)及之后版本。
说明
针对该问题,修复方案如下:
- 为用户设置密码时,会检查用户名是否符合要求。
- 如果用户名不符合要求(即
resource/public/connect),终端会主动报错。 - 如果检查用户名符合要求,开始走正常的解析流程。
规避方式:
请勿使用关键字作为用户名。