Нет ничего необычного в том, чтобы иметь один сценарий для развертывания изменений.Дело в том, что такой сценарий должен запускаться опытным пользователем, потому что он должен иметь системные привилегии на ЛЮБОМ уровне.Обычно это означает учетную запись 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, может привести к нежелательным результатам.