业务租户/sys 租户对 OceanBase 数据库下面的对象执行 DDL 操作时报错 ERROR 1044(42000) : Access denied for user 'xxx'@'%' to database 'oceanbase'。
在 OAS 中,白屏绑定计划也失败。 从 OceanBase 数据库 V4.2.3 版本开始,增加了内核限制。root 用户默认不能在 OceanBase 数据库下面执行 DDL 操作。 如下面的语句中,需要对内部表 oceanbase.__all_table_history 绑定计划,但是执行计划绑定会报错,显示没有足够的权限。
SELECT
/*+index(__all_table_history idx_data_table_id)*/
table_id,
table_type,
index_type
FROM (
SELECT TABLE_ID,
SCHEMA_VERSION,
TABLE_TYPE,
INDEX_TYPE,
IS_DELETED,
ROW_NUMBER() OVER (
PARTITION BY TABLE_ID
ORDER BY SCHEMA_VERSION DESC
) AS RN
FROM __all_table_history
WHERE TENANT_ID = 0
AND DATA_TABLE_ID = 630518
) V
WHERE RN = 1
and IS_DELETED = 0
ORDER BY TABLE_ID;
使用 sys 租户(默认 ocp_monitor user),执行报错。

使用业务租户(默认 operator user),执行报错。

解决方法
如应急需要绑定 outline,步骤如下。
联系 OceanBase 数据库技术支持团队,修改
enable_sys_table_ddl = true参数。OAS 中绑定需要的计划。
确认生效后,关闭
enable_sys_table_ddl = false。
适用版本
OceanBase 数据库 V4.2.3(oceanbase-4.2.3.0-100000052024041220)及之后版本。