代码之家  ›  专栏  ›  技术社区  ›  dgo.a

对函数的revoke/grant all更改了哪些表和列

  •  1
  • dgo.a  · 技术社区  · 6 年前

    为以下查询更改了哪些表/列:

    REVOKE ALL PRIVILEGES ON FUNCTION "..."() FROM PUBLIC CASCADE;
    -- function_owner can still update the function
    
    GRANT ALL PRIVILEGES ON FUNCTION "..."() TO function_owner CASCADE;
    
    
    REVOKE ALL PRIVILEGES ON FUNCTION "..."() FROM function_owner CASCADE;
    -- function_owner can't update the function. 
    
    GRANT ALL PRIVILEGES ON FUNCTION "..."() TO function_owner CASCADE;
    -- function_owner can now update the function.
    

    我知道。 pg_catalog.pg_proc.proacl 改变了。还有其他的表和列吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Laurenz Albe    6 年前

    pg_proc.proacl 确实是唯一一个在 GRANT REVOKE 对函数的权限。

    要记住两件事:

    1. 创建函数时,它具有默认权限( PUBLIC 业主可以 EXECUTE 它)和 proacl 列为空(这表示默认权限)。

      这就是为什么列的开头是空的,并且在后面包含一个值的原因。 撤销 的特权 公众 .

    2. 如果你 撤销 这是一个从未被授予的特权,什么都不会发生。同样,如果你 补助金 一个已经被授予的特权,什么都不会发生。

      你的 补助金 是这样一个禁止操作,因为所有者拥有 执行 默认情况下的权限。在用您的 撤销 .