23.07.2011 09:39
OlegON
 
Достаточно часто бывает, что пользователи (клиенты) просят для каких-то нужд дать 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 (пересозданием пользователя).
16.07.2013 17:08
Troll
 
Добавлю для вьюшек

Код:
begin
for c in (select view_name,owner from dba_views where owner in ('USER'))
loop
begin
execute immediate 'GRANT SELECT ON '||c.owner||'.' || c.view_name || ' to OLEGON_READER';
end;
end loop;
end;
/
Часовой пояс GMT +3, время: 01:10.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.