Hvis du har kontrol over den måde, din applikation forbinder på (f.eks. en initialiseringserklæring for din forbindelsespulje), er alt, hvad du skal gøre, at køre:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
Fra det tidspunkt og fremefter (i løbet af sessionens levetid) vil der blive søgt efter ethvert ukvalificeret objektnavn i PRODUCTS
skema.
Alle tilskud givet til PRODUCTS_READONLY
vil være i kraft. Sessionen kører under legitimationsoplysninger (og sikkerhedsbegrænsninger) for den oprindelige bruger, der blev brugt til at logge ind.
Hvis du ikke kan ændre den måde, forbindelsen etableres eller initialiseres på, bør en logon-trigger også opnå dette:
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;
/
Bemærk, at det er afgørende at fange enhver undtagelse, fordi ellers vil en potentiel fejl i den udførte SQL effektivt logge alle ud af databasen. Så brug det med omtanke, og test det godt, før du sætter det i produktion.