基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
grant 视图 select 权限报 ORA-04063 错误
更新时间:2024-01-18 02:01
问题描述
Oracle 租户下分别使用 sys 用户和视图所在用户授权都报错,错误码为 ORA-04063。
以下以在 sys 用户和 lims 用户下授权视图 VIEW_L_FOR500INDEX 为例。
obclient> grant SELECT on LIMS.VIEW_L_FOR500INDEX to LIMS_INTERFACE;
语句执行失败,报错信息如下:
ErrorCode = 4063, SQLState = 42S22, Details = ORA-04063: view 'LIMS.VIEW_L_FOR500INDEX' has errors
在 lims 用户查看视图 VIEW_L_FOR500INDEX 是否正常。
obclient> SELECT * FROM VIEW_L_FOR500INDEX;
返回结果如下:
+-----------+----------+--------------+-------------+
| aaa_total | bbb_free | ab_total_gb | cc_free_gb |
+-----------+----------+--------------+-------------+
| 62 | 59.5 | 30 | 23 |
| 62 | 59.5 | 30 | 23 |
| 62 | 59.5 | 30 | 23 |
+-----------+----------+--------------+-------------+
适用版本
OceanBase 数据库 V2.x、V3.x 版本。
问题原因
A 用户 grant select on B.view to C 的时候需要解析 B.view 的定义并检查 A 是否对涉及的对象都有权限。C 用户执行 select * from B.view 的时候需要检查 B 用户对 B.view 中的对象是否都有权限。分析视图定义的时候没有考虑包含 pl function 的情况。
解决方法
可通过 grant select any table, execute any procedure to C 绕过。