撤消/启用全部功能后更改了哪些表和列

时间:2018-07-03 09:20:24

标签: postgresql privileges

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

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 个答案:

答案 0 :(得分:0)

pg_proc.proacl实际上是您对某个功能拥有GRANTREVOKE特权的唯一修改的列。

有两件事要记住:

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

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

  2. 如果您REVOKE从未获得过特权,则什么都不会发生。同样,如果您GRANT已被授予特权,则什么也不会发生。

    您的GRANT就是这样的空操作,因为默认情况下所有者拥有EXECUTE特权。您只是用REVOKE将特权从默认值更改之前看不到它。