Jeśli masz kontrolę nad sposobem, w jaki Twoja aplikacja łączy się (np. instrukcja inicjowania puli połączeń), wystarczy, że uruchomisz:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
Od tego momentu (w czasie trwania sesji) każda niekwalifikowana nazwa obiektu będzie wyszukiwana w PRODUCTS
schemat.
Wszystkie dotacje przyznane dla PRODUCTS_READONLY
będzie obowiązywać. Sesja będzie działać z poświadczeniami (i ograniczeniami bezpieczeństwa) pierwotnego użytkownika użytego do zalogowania.
Jeśli nie możesz zmienić sposobu nawiązywania lub inicjowania połączenia, wyzwalacz logowania również powinien to osiągnąć:
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;
/
Pamiętaj, że łapanie w pułapkę dowolnego jest bardzo ważne wyjątek, ponieważ w przeciwnym razie potencjalny błąd w wykonywanym SQL skutecznie wyloguje wszystkich z bazy danych. Dlatego używaj go ostrożnie i przetestuj go dobrze przed wprowadzeniem go do produkcji.