更改存储过程

您可以使用 ALTER PROCEDURE 更改存储过程并保留其授权。

示例

下面的示例使用以下过程:

=> CREATE PROCEDURE echo_integer(IN x int) LANGUAGE PLvSQL AS $$
BEGIN
    RAISE INFO 'x is %', x;
END;
$$;

默认情况下,存储过程以调用者的权限执行,因此,调用者必须对存储过程访问的编录对象具有必要的权限。您可以通过指定 SECURITY 选项的 DEFINER,来允许调用者使用定义者的权限、默认角色用户参数、和用户属性 (RESOURCE_POOL、MEMORY_CAP_KB、TEMP_SPACE_CAP_KB、RUNTIMECAP)。

使用以下对象的权限执行过程...

  • 定义者(所有者):

    => ALTER PROCEDURE echo_integer(int) SECURITY DEFINER;
    
  • 调用者:

    => ALTER PROCEDURE echo_integer(int) SECURITY INVOKER;
    

更改过程的源代码:

=> ALTER PROCEDURE echo_integer(int) SOURCE TO $$
    BEGIN
        RAISE INFO 'the integer is: %', x;
    END;
$$;

更改过程的所有者(定义者):

=> ALTER PROCEDURE echo_integer(int) OWNER TO u1;

更改过程的架构:

=> ALTER PROCEDURE echo_integer(int) SET SCHEMA s1;

重命名过程:

=> ALTER PROCEDURE echo_integer(int) RENAME TO echo_int;