问题现象
用户执行下述 SQL 时触发 core。
update dyn_entity_meta_his set ENTITY_META_ALL_JSON=ENTITY_META_ALL_JSON||q'~nput\\\", \\\"sysField\\\" : false, \\\"sortNo\\\" : 107, \\\"primary\\\" : false\\r\\n}, { \\\"id\\\" : \\\"3d716ec27a624b66975a9cfccae6b046\\\", \\\"displayName\\\" : \\\"租户ID\\\", \\\"fieldName\\\" : \\\"tenant_id\\\", \\\"fieldType\\\" : \\\"VARCHAR\\\", \\\"length\\\" : 32, \\\"control\\\" : \\\"input\\\", \\\"primary\\\" : false, \\\"foreignKey\\\" : false, \\\"nullAble\\\" : true, \\\"sysField\\\" : true, \\\"sortNo\\\" : 10000, \\\"sysFieldType\\\" : \\\"tenant_id\\\", \\\"formShow\\\" : false\\r\\n}, { \\\"id\\\" : \\\"9fd5e21d2c824f01a0335e628e5b6001\\\", \\\"displayName\\\" : \\\"乐观锁\\\", \\\"fieldName\\\" : \\\"revision\\\", \\\"fieldType\\\" : \\\"BIGINT\\\", \\\"length\\\" : 20, \\\"control\\\" : \\\"number\\\", \\\"primary\\\" : false, \\\"foreignKey\\\" : false, \\\"nullAble\\\" : true, \\\"sysField\\\" : true, \\\"sortNo\\\" : 10001, \\\"sysFieldType\\\" : \\\"revision\\\", \\\"formShow\\\" : false\\r\\n}, { \\\"id\\\" : \\\"f2fd4db4e0cf422eb2116c54cebed83e\\\", \\\"displayName\\\" : \\\"是否有效\\\", \\\"fieldName\\\" : \\\"data_enable\\\", \\\"fieldType\\\" : \\\"INTEGER\\\", \\\"length\\\" : 10, \\\"control\\\" : \\\"number\\\", \\\"primary\\\" : false, \\\"foreignKey\\\" : false, \\\"nullAble\\\" : false, \\\"sysField\\\" : true, \\\"sortNo\\\" : 10002, \\\"sysFieldType\\\" : \\\"data_enable\\\", \\\"formShow\\\" : false\\r\\n}, { \\\"id\\\" : \\\"cc2fd926276f4942a081008706260d31\\\", \\\"displayName\\\" : \\\"创建人ID\\\", \\\"fieldName\\\" : \\\"creator_id\\\", \\\"fieldType\\\" : \\\"VARCHAR\\\", \\\"length\\\" : 32, \\\"control\\\" : \\\"input\\\", \\\"primary\\\" : false, \\\"foreignKey\\\" : false, \\\"nullAble\\\" : true, \\\"sysField\\\" : true, \\\"sortNo\\\" : 10003, \\\"sysFieldType\\\" : \\\"creator_id\\\", \\\"formShow\\\" : false\\r\\n}, { \\\"id\\\" : \\\"97c84310cec347b088186fb46fc97e5f\\\", \\\"displayName\\\" : \\\"创建人名称\\\", \\\"fieldName\\\" : \\\"creator\\\", \\\"fieldType\\\" : \\\"VARCHAR\\\", \\\"length\\\" : 30, \\\"control\\\" : \\\"input\\\", \\\"primary\\\" : false, \\\"foreignKey\\\" : f~' where ID='02b81d04a5df45809a86d70a365438f2';
关键诊断信息
触发条件
Oracle 模式下,q'xxx' 时候对反斜杠转义。
问题原因
在 OceanBase 数据库 V4.0.0 之前版本, Oracle 模式解析存在反斜杠的 [q|Q]'xxxxxxxxx' 的 SQL 语句过程中,会把单引号内的 \ 转义为 \\,使存储转义后字符串的 BUF 大小为 SQL 长度 +1,因此,当需要转义的 \ 过多时,会导致越界访问。
问题的风险及影响
Oracle 模式解析带有反斜杠的 [q|Q]'xxxxxxxxx' 的 SQL 语句,有一定几率触发 core。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 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)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP1(oceanbase-2.2.77-117000112023051914)及之后版本、V3.2.3 BP7 Hotfix2(oceanbase-3.2.3.3-107020062023022810)版本、V3.2.3 BP7 Hotfix3(oceanbase-3.2.3.3-107030052023031712)版本、V3.2.3 BP7 Hotfix4(oceanbase-3.2.3.3-107040032023032910)版本、V3.2.3 BP7 Hotfix5(oceanbase-3.2.3.3-107050022023040817)版本、V3.2.3 BP7 Hotfix6(oceanbase-3.2.3.3-107060012023041113)版本、V3.2.3 BP8(oceanbase-3.2.3.3-108000062023041511)及之后版本、V3.2.4 BP2(oceanbase-3.2.4.2-102000042023022717)及之后版本。
取消 Oracle 模式下处理
q'xxx'时候对反斜杠转义。
规避方式
取消 Oracle 模式下处理 q'xxx' 时候对反斜杠转义。