Si tiene control sobre la forma en que se conecta su aplicación (por ejemplo, una declaración de inicialización para su conjunto de conexiones), todo lo que necesita hacer es ejecutar:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
A partir de ese momento (durante la duración de la sesión), se buscará cualquier nombre de objeto no calificado en PRODUCTS
esquema.
Todas las subvenciones otorgadas a PRODUCTS_READONLY
estará en vigor. La sesión se ejecutará con las credenciales (y las restricciones de seguridad) del usuario original utilizado para iniciar sesión.
Si no puede cambiar la forma en que se establece o inicializa la conexión, un disparador de inicio de sesión también debería lograr esto:
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;
/
Tenga en cuenta que es crucial atrapar cualquier excepción, porque de lo contrario, un posible error en el SQL ejecutado cerrará efectivamente la sesión de todos en la base de datos. Así que utilícelo con cuidado y pruébelo bien antes de ponerlo en producción.