针对以下查询更改了哪些表/列:
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
被更改了。还有其他表和列吗?
答案 0 :(得分:0)
pg_proc.proacl
实际上是您对某个功能拥有GRANT
或REVOKE
特权的唯一修改的列。
有两件事要记住:
创建函数时,它具有默认特权(PUBLIC
,所有者可以EXECUTE
),并且proacl
列为NULL(这表示默认特权)
这就是为什么该列开头是空的,并且在您REVOKE
拥有PUBLIC
的特权之后包含一个值。
如果您REVOKE
从未获得过特权,则什么都不会发生。同样,如果您GRANT
已被授予特权,则什么也不会发生。
您的GRANT
就是这样的空操作,因为默认情况下所有者拥有EXECUTE
特权。您只是用REVOKE
将特权从默认值更改之前看不到它。