Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:accesso in sola lettura allo schema per un altro utente?

Se hai il controllo sul modo in cui la tua applicazione si connette (ad es. un'istruzione di inizializzazione per il tuo pool di connessioni), tutto ciò che devi fare è eseguire:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

Da quel momento in poi (durante la durata della sessione) qualsiasi nome di oggetto non qualificato verrà cercato nel PRODUCTS schema.

Tutte le sovvenzioni concesse a PRODUCTS_READONLY sarà in vigore. La sessione verrà eseguita con le credenziali (e le restrizioni di sicurezza) dell'utente originale utilizzato per accedere.

Se non è possibile modificare il modo in cui viene stabilita o inizializzata la connessione, anche un trigger di accesso dovrebbe eseguire questa operazione:

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;
/

Tieni presente che è fondamentale intrappolare qualsiasi eccezione, perché altrimenti un potenziale errore nell'SQL eseguito disconnetterà tutti dal database. Quindi usalo con cura e testalo bene prima di metterlo in produzione.