微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

存储过程 ORACLE 的 INHERIT PRIVILEGES 不足

如何解决存储过程 ORACLE 的 INHERIT PRIVILEGES 不足

我在用户 Meta 中有一个存储过程。此 SP 截断了用户 STAGE 中的表。

CREATE PROCEDURE Meta.sp_truncate_tablex
  AUTHID CURRENT_USER
as
BEGIN
EXECUTE IMMEDIATE 'TruncATE TABLE STAGE.Tablex';
END;

当我运行 SP 时,我得到 RA-06598: insufficient INHERIT PRIVILEGES

我试图让两个用户都成为 DBA。 这意味着如果我运行 SELECT grantee

WHERE  granted_role = 'DBA'
ORDER BY grantee;

它告诉我 Meta dn ST​​AGE 是 DBA。 我也试过:GRANT INHERIT PRIVILEGES ON USER STAGE TO Meta; 但我在 Oracle 18 中仍然遇到同样的错误

解决方法

你的问题是这个子句:

  AUTHID CURRENT_USER

这意味着执行该过程的用户具有他们自己的权限。因此,非 META 用户无法运行该过程,除非他们具有 DROP ANY TABLE 权限,在这种情况下,他们不需要运行该过程,因为无论如何他们都可以截断表。

解决方法是用

声明程序
  AUTHID DEFINER

现在该过程以其所有者的权限执行 - META - 他可能拥有目标表。除了他们没有。该表实际上归 STAGE 所有。所以 STAGE 也需要拥有程序。

碰巧的是,DEFINER 权限是默认的,所以我们不需要明确定义它们,除非为了清楚起见。

CREATE PROCEDURE STAGE.sp_truncate_tablex
AS
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE STAGE.Tablex';
END;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。