sql >> Base de Datos >  >> RDS >> Oracle

Oracle:¿Acceso de solo lectura al esquema para otro usuario?

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.