Нет ничего необычного в том, чтобы иметь один скрипт для развертывания изменения. Дело в том, что такой скрипт должен запускаться мощным пользователем, потому что он должен иметь системные привилегии на ЛЮБОЙ уровне. Обычно это означает учетную запись DBA, предпочтительно учетную запись приложения, но в противном случае SYSTEM или SYS.
Так сценарий вы хотите, будет выглядеть следующим образом:
grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from user_a.t42
join user_a.t23
on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/
Общий сценарий является то, что у нас есть набор отдельных сценариев, которые были написаны для запуска разных пользователей, но которые теперь мы должны связать в одно развертывание. Исходные сценарии не содержат имен схем, и есть много веских причин, по которым мы не хотели бы жестко кодировать их в сценариях.
Один из способов построить этот мастер-скрипт должен использовать изменить синтаксис CURRENT_SCHEMA:
alter session set current_schema=USER_A
/
@run_grants_to_userb.sql
alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql
Нам все еще нужно пользователю DBA запустить мастер сценарий. Одно из преимуществ переключения текущей схемы заключается в том, что она позволяет нам развертывать объекты, такие как ссылки на базы данных, которые через причуду синтаксиса не могут иметь имя схемы в своем объявлении. Одна из них заключается в том, что пользователь не изменяется, поэтому скрипт, который использует псевдо-столбец USER, может привести к нежелательным результатам.
Не имеет смысла - скрипты не существуют в схеме, это всего лишь список команд, которые пользователь, с которым вы подключаетесь, имеет привилегию запуска. Операторы выдачи IIRC для каждого объекта (IE: таблица). Пожалуйста, перефразируйте свой вопрос, чтобы было более ясно, о чем вы спрашиваете. –