ORA-01720 错误表示在 Oracle 数据库中尝试授权时,缺少必要的 grant option 权限。这通常发生在用户试图将权限传递给其他用户时,但自身并未被授予传递权限。 示例,假设以下场景:
用户 A 创建了视图 V_A,其中视图中用了C用户T_C表。
用户 B 使用视图 表V_A 。
用户 B 尝试将 V_B 的查询权限授予用户 C。
执行以下命令时会报错:
-- 基于1,我们要将用户C的表 T_C 授权给用户 AGRANT SELECT ON T_C TO C; -- 基于2,我们要将用户A的视图表 V_A 授权给用户 BGRANT SELECT ON V_A TO B; -- 那么在用户 B 下使用视图表 V_A ,会出现ORA-01720报错,即使将用户C的表 T_C 授权给用户 C,依然无法解决该问题GRANT SELECT ON T_C TO B; -- 报错:ORA-01720: grant option does not exist for 'V_A' 解决方法:
1. 使用 WITH GRANT OPTION
在用户 C 授权给用户 A 时,添加 WITH GRANT OPTION,允许用户 A 将权限传递给其他用户。
-- 用户 A 授权给用户 B,并允许传递权限GRANT SELECT ON T_C TO A WITH GRANT OPTION;
-- 用户 A 再次授权给用户 BGRANT SELECT ON V_A TO B;此时,用户 B 可以正常访问视图 V_A。
2. 权限链分析
确保所有涉及的对象(如表或视图)都已正确授权。如果用户 A 的视图依赖于多个对象,则每个对象都需要添加 WITH GRANT OPTION。
注意事项