首页 文章

Oracle中的存储过程使用Invoker的特权而非Owners执行

提问于
浏览
0

我读过,“存储过程和SQL方法使用其所有者的权限执行,而不是使用当前用户 . ”

我用Oracle USER - SYSTEM(在Oracle 11g中)执行了以下步骤

步骤1)创建一个在模式PROD中创建物化视图的过程:

create procedure prod.sp_create_mview
is
begin
  execute immediate 'create materialized view prod.XXX...';                         
end;
/

步骤2)执行它:

begin
  prod.sp_create_mview;
end;
/

MVIEW是在PROD模式中创建的

问题:1 . 创建mview和create table的权限未授予用户PROD,仍然创建了MVIEW . 如果使用OWNER(即PROD)权限执行过程,该怎么办?

1 回答

  • 0

    默认情况下,Oracle将函数视为与其调用者具有相同的权限 .

    要定义具有所有者权限的函数,您需要在定义函数时使用 AUTHID DEFINER .

    所以改为

    create procedure prod.sp_create_mview
    AUTHID DEFINER
    is
    begin
      execute immediate 'create materialized view prod.XXX...';                         
    end;
    /
    

相关问题