如何解决存储过程 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 STAGE 是 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 举报,一经查实,本站将立刻删除。