Ако имате контрол върху начина, по който вашето приложение се свързва (напр. израз за инициализация за вашия пул от връзки), всичко, което трябва да направите, е да изпълните:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
От този момент нататък (по време на живота на сесията) всяко неквалифицирано име на обект ще бъде търсено в PRODUCTS
схема.
Всички безвъзмездни средства, дадени на PRODUCTS_READONLY
ще бъде в сила. Сесията ще се изпълнява под идентификационните данни (и ограниченията за сигурност) на първоначалния потребител, използван за влизане.
Ако не можете да промените начина, по който връзката е установена или инициализирана, тригерът за влизане също трябва да постигне това:
create or replace trigger logon_trg
after logon on database
begin
if (user = 'PRODUCTS_READONLY') then
execute immediate 'alter session set current_schema = products';
end if;
exception
when others then null; -- prevent a login failure due to an exception
end logon_trg;
/
Обърнете внимание, че е изключително важно да хванете всички изключение, защото в противен случай потенциална грешка в изпълнения SQL ефективно ще изведе всички от базата данни. Затова използвайте внимателно и го тествайте добре, преди да го пуснете в производство.