哪些表/列被更改为以下查询:
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
确实是唯一在函数GRANT
或REVOKE
权限时被修改的列。
有两件事要记住:
创建函数时,它具有默认权限(
PUBLIC
所有者可以EXECUTE
它(,proacl
列为 NULL(这表示默认权限(。这就是为什么该列在开头为空并在您
REVOKE
的权限后包含一个值PUBLIC
.如果您
REVOKE
以前未授予的权限,则不会发生任何操作。同样,如果您GRANT
已授予的权限,则不会发生任何操作。您的
GRANT
是这样的无操作,因为默认情况下所有者具有EXECUTE
权限。您只是在使用REVOKE
更改默认权限之前看不到它。