Кто-то, когда-то, как-то удалил процедуру 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