Чтобы пользователь Oracle имел право в конкретном сеансе работать с конкретной редакцией:
Выдать пользователю личное общее разрешение на работу с объектами требуемой редакции можно примерно так: GRANT USE ON EDITION app_release_1 TO scott;
USE – это привилегия на объекты вида EDITION, передаваемая к тому же через PUBLIC и через роли. Если редакцию, объявить в БД умолчательной, она автоматически полагается выданной для PUBLIC, то есть общедоступной, и не требует личных (или же ролевых) разрешений. По этой причине изначально частных разрешений на работу с ORA$BASE не требуется – оно есть у всех. То же самое произойдет с редакцией APP_RELEASE_1, если в какой-то момент выдать: ALTER DATABASE DEFAULT EDITION = app_release_1;
На последнюю команду способен обладатель привилегии ALTER DATABASE (а ею обладают SYS и SYSTEM, но пока что не YARD). Как только такая команда будет выдана, команды GRANT USE, как выше, для придания нужных полномочий пользователю SCOTT, не потребуется. Выдачей подобной команды может венчаться отладка новых редакций объектов («перевод приложения на новую редакцию»).
Когда пользователь Oracle получил разрешение (то есть привилегию) на работу с объектами конкретной редакции, он получает право в рамках отдельных сеансов настраиваться на нее: SQL> CONNECT scott/tiger Connected. SQL> SELECT SYS_CONTEXT ( 'USERENV', 'CURRENT_EDITION_NAME' ) FROM dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------- ORA$BASE
SQL> ALTER SESSION SET EDITION = app_release_1;
Session altered.
SQL> SELECT SYS_CONTEXT ( 'USERENV', 'CURRENT_EDITION_NAME' ) FROM dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME') -------------------------------------------------------------------- APP_RELEASE_1
Код выше подтверждает то, что по умолчанию при открытии сеанса действует редакция, объявленая ранее умолчательной в БД.