Как можно позволить кому-то запускать мои функции и процедуры, но НЕ просмотривать их исходные коды?
Есть схема БД с функциями, процедурами и пакетами.
Хочу разрешить некоторым разработчикам доступ к моим таблицам только для чтения, поэтому я создаю для них пользователя с доступом READ ONLY к моим таблицам. Хочу предоставить им EXECUTE на мои процедуры и функции, но НЕ разрешить просматривать их исходный текст (код).
Когда предоставляю EXECUTE на мои функции или процедуры, то они могут просто сделать DESCRIBE (в SQL-Developer разработчике или TOAD), или просматривать код из представления all_source.
Как запретить им просматривать мои исходные тексты PL/SQL?
Свободный перевод вопроса How can I allow someone to run my Oracle functions/procedures but not able to view its source codes от участника @angkong
Ответы (1 шт):
Поместите все функции и процедуры в пакеты. Дайте права на выполнение этих пакетов другому пользователю.
Имея права на выполнение, другой пользователь может выполнить процедуру из пакета, видеть спецификацию пакета, но не сможет видеть тело пакета, то есть код реализации.
create or replace package pack as
type tab is table of int;
procedure proc (par tab);
end;
/
create or replace package body pack as
procedure proc (par tab) is
begin null;
end;
end;
/
grant execute on pack to me;
Под другим пользователем:
SQL> show user
USER is "ME"
SQL> select name, type, text
2 from all_source where name='PACK'
3 order by type, line
4 /
NAME TYPE TEXT
-------- ------------ --------------------------------
PACK PACKAGE package pack as
PACK PACKAGE type tab is table of int;
PACK PACKAGE procedure proc (par tab);
PACK PACKAGE end;
SQL>