Какие таблицы и столбцы изменены для REVOKE / GRANT ALL ON FUNCTION - PullRequest
0 голосов
/ 03 июля 2018

Какие таблицы / столбцы изменены для следующих запросов:

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 голосов
/ 03 июля 2018

pg_proc.proacl действительно единственный столбец, который изменяется, если у вас GRANT или REVOKE привилегии для функции.

Необходимо помнить две вещи:

  1. Когда функция создается, она имеет привилегии по умолчанию (PUBLIC, и владелец может EXECUTE ее), а столбец proacl имеет значение NULL (это означает привилегии по умолчанию).

    Именно поэтому столбец в начале пуст и содержит значение после REVOKE привилегий для PUBLIC.

  2. Если у вас REVOKE привилегия, которая не была предоставлена ​​ранее, ничего не происходит. Точно так же, если вы GRANT уже предоставили привилегию, ничего не произойдет.

    Ваш GRANT такой бездействующий, потому что владелец по умолчанию имеет привилегию EXECUTE. Вы просто не видите его, пока не изменили привилегию по умолчанию с помощью REVOKE.

...