REVOKE/GRANT ALL ON FUNCTION 更改了哪些表和列

Which tables and columns are altered for both REVOKE/GRANT ALL ON FUNCTION

哪些 tables/columsn 针对以下查询进行了更改:

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 被修改了。还有其他表和列吗?

pg_proc.proacl 确实是唯一修改的列,如果您对某个函数具有 GRANTREVOKE 权限。

有两点需要牢记:

  1. 创建函数时,它具有默认权限(PUBLIC 并且所有者可能 EXECUTE 它)并且 proacl 列为 NULL(这表示默认权限)。

    这就是为什么该列在开头是空的,并且在您 REVOKE PUBLIC 的权限之后包含一个值。

  2. 如果您 REVOKE 之前未授予过权限,则不会发生任何事情。同样,如果您 GRANT 已经授予的权限,则不会发生任何事情。

    你的GRANT就是这样的无操作,因为所有者默认有EXECUTE权限。在使用 REVOKE.

  3. 更改默认权限之前,您只是看不到它