Создайте процедуру, которая просто блокирует вас, и установите ее у другого пользователя, которому «доверяют» dbms_lock (USERA), предоставьте USERA доступ к dbms_lock.
Тогда просто предоставьте USERB доступ к этой функции. Тогда им не нужно будет иметь доступ к DBMS_LOCK
(перед запуском убедитесь, что в вашей системе нет usera и userb)
Подключитесь как пользователь с привилегиями привилегий для dbms_lock и можете создавать пользователей
drop user usera cascade;
drop user userb cascade;
create user usera default tablespace users identified by abc123;
grant create session to usera;
grant resource to usera;
grant execute on dbms_lock to usera;
create user userb default tablespace users identified by abc123;
grant create session to userb;
grant resource to useb
connect usera/abc123;
create or replace function usera.f_sleep( in_time number ) return number is
begin
dbms_lock.sleep(in_time);
return 1;
end;
/
grant execute on usera.f_sleep to userb;
connect userb/abc123;
/* About to sleep as userb */
select usera.f_sleep(5) from dual;
/* Finished sleeping as userb */
/* Attempt to access dbms_lock as userb.. Should fail */
begin
dbms_lock.sleep(5);
end;
/
/* Finished */