【问题标题】:Insufficient INHERIT PRIVILEGES for a stored procedure ORACLE存储过程 ORACLE 的 INHERIT PRIVILEGES 不足
【发布时间】:2021-08-30 05:24:51
【问题描述】:

我在用户 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 中仍然遇到同样的错误。

【问题讨论】:

  • @AlexPoole 是的,我已经阅读并尝试了一切。我将所有权限授予我的 META。它只是没有帮助。我继续得到同样的错误。
  • 您作为哪个用户执行该过程?如果那是 META,为什么你有 authid 子句?不过,同时创建用户 DBA 似乎有点矫枉过正。
  • authid 我有,因为它写在您发送的页面上。但我才意识到,当我不使用它时,它运行起来没有问题。 “OVER KILL”就是问题所在。

标签: oracle stored-procedures plsql dynamic-sql privileges


【解决方案1】:

你的问题是这个子句:

  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;

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2011-12-29
    • 1970-01-01
    • 2019-07-11
    • 2016-05-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多