Достаточно часто бывает, что пользователи (клиенты) просят для каких-то нужд дать Oracle-пользователю права на чтение таблиц, например, supermag. Забегая вперед можно предположить, что это будет далеко не единственная просьба такого рода, соответственно, необходимо выдать права для чтения таблиц роли, а потом уже выдать эту роль требуемому пользователю. Для того, чтобы не запутаться, кто создавал роль и как-то описать ее назначение (через полгода все забывается просто начисто), я обычно называю подобную роль olegon_reader. Итак, код:
Код:
begin
for c in (select table_name,owner from dba_tables where owner in ('SUPERMAG','REPORTS'))
loop
begin
execute immediate
'GRANT SELECT ON '||c.owner||'.' || c.table_name || ' to OLEGON_READER';
end;
end loop;
end;
/
выполняется все это от sys (чтобы иметь доступ к dba_tables), в данном случае дается доступ на все таблички пользователей SUPERMAG и REPORTS (если второго пользователя у вас в системе нет, то код менять не требуется). Соответственно, можно дальше дать роль пользователю командой:
Код:
grant olegon_reader to user;
вот и все, что требовалось. Однако, надо помнить, что на указанную роль пользователь должен переключаться командой
Код:
set role OLEGON_READER;
либо эту роль надо ему включить в default role (пересозданием пользователя).