基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
UDF 在 information_schema 中可见其他用户 DDL 的兼容性差异分析
更新时间:2026-08-18 03:21
问题现象
当用户拥有其他用户 Routine 的 ALTER ROUTINE、CREATE ROUTINE 或 EXECUTE 权限时,查询 information_schema.routines 视图。
- OceanBase 数据库 MySQL 模式:
ROUTINE_DEFINITION字段会直接返回其他用户 Routine 的实际定义内容。 - 原生 MySQL:在相同权限场景下,
ROUTINE_DEFINITION字段应返回NULL。
两者行为不一致。
问题原因
此问题属于 OceanBase 数据库的兼容性与权限控制缺陷。
information_schema.routines 视图未对 ROUTINE_DEFINITION 字段进行字段级的权限校验,系统总是无条件地输出该字段的值,未能实现与原生 MySQL 一致的访问控制效果。
关键信息
- 触发条件:当前用户拥有其他用户 Routine 的
ALTER ROUTINE、CREATE ROUTINE或EXECUTE权限时,查询information_schema.routines视图。 - 复现概率:必现。
问题的风险及影响
- 安全隐患:非 Routine 所有者或未获明确授权的用户,可能通过该视图查看到其他用户 Routine 的内部定义代码,存在信息泄露风险。
- 兼容性差异:与原生 MySQL 的权限返回行为不一致,可能影响依赖标准 MySQL 语义的应用逻辑。
适用版本
- 影响版本:全版本。
- 修复版本:V4.4.2(oceanbase-4.4.2.0-100030022026042009)和 V5.0.1(oceanbase-5.0.1.0-100000042026072711)。
解决方法
该问题已修复:在 information_schema.routines 视图定义内,针对 ROUTINE_DEFINITION 字段增加了独立的权限校验机制。仅当查询用户为该 Routine 的 Definer,或拥有全局 SELECT 权限时,才展示实际内容,否则返回 NULL(与 MySQL 行为一致)。
请受影响环境升级至修复版本(V4.4.2 或 V5.0.1 及以上)以彻底解决。
规避方式
暂无临时规避方案,需等待内核修复的新版本发布后升级。
建议在修复前遵循权限最小化原则,避免随意授予普通用户跨用户的 ALTER ROUTINE、CREATE ROUTINE 或 EXECUTE 权限,以降低潜在的信息泄露风险。