Om du har kontroll över hur din applikation ansluter (t.ex. en initialiseringssats för din anslutningspool), är allt du behöver göra att köra:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
Från den tidpunkten och framåt (under sessionens livstid) kommer alla okvalificerade objektnamn att sökas efter i PRODUCTS
schema.
Alla bidrag som ges till PRODUCTS_READONLY
kommer att gälla. Sessionen kommer att köras under autentiseringsuppgifterna (och säkerhetsbegränsningarna) för den ursprungliga användare som användes för att logga in.
Om du inte kan ändra hur anslutningen upprättas eller initieras bör en inloggningsutlösare också åstadkomma detta:
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;
/
Observera att det är avgörande att fånga alla undantag, eftersom ett potentiellt fel i den exekverade SQL-filen i praktiken kommer att logga ut alla från databasen. Så använd den med försiktighet och testa den väl innan du sätter den i produktion.