Apex · Oracle

Usuarios Proxy en Oracle: OCI Autonomous Database

Los usuarios proxy en Oracle representan una funcionalidad poderosa que permite a un usuario conectarse a la base de datos a través de otro usuario, manteniendo la seguridad y trazabilidad. En este artículo, exploraremos cómo implementar usuarios proxy en Oracle OCI Autonomous Database y veremos casos de uso prácticos.

¿Qué son los Usuarios Proxy?

Un usuario proxy permite a un desarrollador conectarse a la base de datos a través de otro usuario (el schema propietario), manteniendo la trazabilidad individual. En nuestro caso:

  • Juan se conecta como hr_juan pero trabaja en el schema hr_app
  • María se conecta como hr_maria pero trabaja en el schema hr_app
  • Carlos se conecta como hr_carlos pero trabaja en el schema hr_app

Beneficio: Todos trabajan en los mismos objetos.

Desarrollador → Usuario Proxy → Schema de Trabajo
(Juan) → hr_juan → hr_app

Implementación en OCI Autonomous Database

  1. Crear el Schema de Trabajo, ejemplo HR_APP

— Conectar como ADMIN

create user hr_app identified by "MiPassword123!";
grant create session, create table, unlimited tablespace to hr_app;
-- De acuerdo a la necesidad
grant create view to hr_app;
grant create sequence to hr_app;
grant create procedure to hr_app;
grant create trigger to hr_app;
grant create synonym to hr_app;

Crear Usuarios Proxy para Desarrolladores

— Crear usuarios para cada desarrollador

create user hr_juan identified by "JuanPass123!";
create user hr_maria identified by "MariaPass123!";
create user hr_carlos identified by "CarlosPass123!";

— Otorgar privilegios de conexión proxy

grant create session to hr_juan, hr_maria, hr_carlos;

— Configurar autenticación proxy

alter user hr_app grant connect through hr_juan;
alter user hr_app grant connect through hr_maria;
alter user hr_app grant connect through hr_carlos;

Conexión con SQL Developer y SQL*Plus

Para conectarse usando usuarios proxy, debes usar el formato: [proxy_user][target_user]

Conexión con SQL Developer

Cada desarrollador se conecta con su propio usuario usando proxy y en un mismo schema de objectos.

sqlplus hr_juan[hr_app]/JuanPass123@your_autonomous_db
sqlplus hr_maria[hr_app]/MariaPass123@your_autonomous_db
sqlplus hr_carlos[hr_app]/CarlosPass123@your_autonomous_db

Juan: Inserta nuevos empleados con su usuario juan_dev, manteniendo trazabilidad de quién creó cada registro.
María: Ve los datos que insertó Juan y los actualiza con su usuario maria_dev, Oracle registra sus modificaciones específicas.
Carlos: Consulta todo el historial con su usuario carlos_dev, accediendo a los cambios de todo el equipo.

Bonus

Consulta de proxys

Para saber que proxys actualmente estan configurados aun schema podriamos ejecutar:

select *
  from dba_proxies
 where client = 'HR_APP';

Auditoria

Muy aparte del beneficio que cada usuario tenga sus credenciales de conexion de manera independiente. Otro de los importes beneficios es la auditoria, ya que podriamos activar politicas y saber quien hizo cambios en la regristros.

Si usamos LOGGER lo mejor seria modificar el procedimiento ins_logger_logs y usar:

select sys_context('USERENV','PROXY_USER') as proxy_user
  from dual;

Eso nos permitera capturar el real usuario conectado asi estemos en SQLcl O SQL Developer.
Como ven las llamdas APEX se mantienen con la configuracion correcta, y si ven un record con HR_APP es cuando no active el proxy, capturaba al usuario global.

La otra opcion seria habilitar DBMS_FGA.ADD_POLICY

BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema   => 'HR_APP',
    object_name     => 'EMPLOYEES',
    policy_name     => 'FGA_EMPLOYEES_PROXY',
    audit_condition => 'SYS_CONTEXT(''USERENV'',''PROXY_USER'') IS NOT NULL',
    statement_types => 'INSERT,UPDATE,DELETE',
    audit_trail     => DBMS_FGA.DB + DBMS_FGA.EXTENDED  -- incluye SQL y binds
  );
END;
/
SELECT event_timestamp,
       dbusername,
       proxy_sessionid,
       action_name,
       object_schema,
       object_name
FROM unified_audit_trail
WHERE object_name = 'HR_JUAN'
ORDER BY event_timestamp DESC;

Leave a comment