为"撤销/全部授予"功能更改了哪些表和列



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

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更改默认权限之前看不到它。

最新更新