Firebird — отзыв GRANT для несуществующей процедуры

Кто-то, когда-то, как-то удалил процедуру REP_UNMARKETABLE_CHECK, но GRANT для неё остался в DDL для процедуры REP_UNMARKETABLE:

GRANT EXECUTE ON PROCEDURE REP_UNMARKETABLE TO PROCEDURE REP_UNMARKETABLE_CHECK;

REVOKE для данного GRANT выполнялся с ошибкой:

revoke execute on procedure REP_UNMARKETABLE from procedure REP_UNMARKETABLE_CHECK;
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-REVOKE failed
-Procedure REP_UNMARKETABLE_CHECK does not exist

Идея крайне проста, нужно создать пустую процедуру REP_UNMARKETABLE_CHECK, которой не существовало, отозвать GRANT, удалить процедуру:

/opt/firebird/bin# ./isql
CONNECT /mnt/database/database.fdb;
create procedure REP_UNMARKETABLE_CHECK as begin end;
commit;
revoke execute on procedure REP_UNMARKETABLE from procedure REP_UNMARKETABLE_CHECK;
commit;
drop procedure REP_UNMARKETABLE_CHECK;
commit;
output /tmp/fb_exec.log;
show grants;
quit;
cat /tmp/fb_exec.log | grep REP_UNMARKETABLE_CHECK

Полезная ссылка: https://www.sql.ru/forum/1298312/strannost-s-revoke

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика