首批通过分布式安全可靠测评,为关键业务系统打造
MySQL 租户中删除存储过程时报错 4016 的原因和解决方法
更新时间:2026-06-10 01:56
问题现象
OceanBase 数据库 V4.3.3 BP1 版本中 MySQL 租户,删除存过报错 4016。

关键 RS 日志信息如下。
[2025-02-10 11:55:09.721222] WDIAG [SHARE.SCHEMA] grant_routine (ob_priv_sql_service.cpp:337) [62041][DDLQueueTh0][T0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=29][errcode=-4016] affected_rows unexpected to be one (affected_rows=0, ret=-4016)
[2025-02-10 11:55:09.721249] WDIAG [RS] revoke_routine (ob_ddl_operator.cpp:8482) [62041][DDLQueueTh0][T0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=25][errcode=-4016] Failed to revoke routine(routine_priv_key={tenant_id:1004, user_id:500003, db:"ob_xxx_xxx", routine:"PROC_xxxxx_xxxxx_xxxxx", routine_type:1}, ret=-4016)
[2025-02-10 11:55:09.721263] WDIAG [RS] drop_routine (ob_ddl_service.cpp:35135) [62041][DDLQueueTh0][T0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=12][errcode=-4016] fail to grant routine(ret=-4016, routine_key={tenant_id:1004, user_id:500003, db:"ob_xxx_xxx", routine:"PROC_xxxxx_xxxxx_xxxxx", routine_type:1}, priv_set=137447342080)
问题原因
权限内部表中 routine name 存储不一致导致无法正确删除。
问题的风险及影响
无法删除存储过程。
适用版本
OceanBase 数据库 V4.3.x 版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.3.5 BP1(oceanbase-4.3.5.1-101000292025030623)及之后版本。
规避方式
将 PROC_xxxxx_xxxxx_xxxxx 存过上赋予的权限先 revoke 掉,然后再进行 drop 操作。