Proxy users y schema only users en Oracle

Un "proxy user" es una funcionalidad que permite a un usuario acceder a la base de datos a través de otro usuario, con el objetivo de realizar operaciones con los privilegios del usuario original.

Esta técnica se utiliza principalmente para facilitar la administración y mejorar la seguridad.

Ventajas

  1. Delegación de Acceso: Un usuario puede delegar a otro usuario (el proxy) la capacidad de conectarse en su nombre, sin compartir su contraseña.

  2. Auditoría y Seguimiento: Las conexiones y operaciones realizadas a través del proxy pueden ser auditadas y rastreadas, diferenciando entre el usuario proxy y el usuario original.

  3. Control de Privilegios: Permite restringir los privilegios del proxy user, limitando lo que puede hacer en nombre del usuario proxied.

Un Schema only user en Oracle implica definir un usuario que no tenga privilegios de inicio de sesión pero que pueda poseer objetos en la base de datos.

Este tipo de usuario se utiliza para separar la propiedad de los objetos de base de datos (como tablas, vistas, procedimientos, etc.) de los permisos de acceso y ejecución, mejorando la seguridad y la gestión de roles y privilegios.

Consideraciones de Seguridad

  • Limitación de Privilegios: Es importante definir claramente qué privilegios tiene el usuario proxy.

  • Auditoría: Implementar auditoría para registrar las acciones realizadas a través del proxy user.

Configuración del Proxy User

Supongamos que tenemos dos usuarios en la base de datos Oracle:

  • schema_user: esquema contenedor de objetos del modelo.

  • app_user: un usuario de aplicación con permisos limitados.

Queremos permitir que app_user pueda operar con los objetos del schema sin otorgarle todos los privilegios de schema_user.

Para esto, configuramos app_user como un proxy user para schema_user.

En nuestra BBDD ya existe un "schema only user", el cual es un usuario que se crea únicamente para poseer un esquema en la base de datos, sin permisos para iniciar sesión directamente.

create user schema_user no authentication quota unlimited on users;
grant create session, create table, create sequence, create view to schema_owner;CREATE USER app_user IDENTIFIED BY app_password;

Podemos ver nuestros usuarios schema only de la siguiente manera:

column username format a30
column account_status format a20

select username,
       account_status,
       authentication_type
from   dba_users
where  authentication_type ='NONE';

Ahora configuramos app_user como proxy user para schema_user:

CREATE USER app_user IDENTIFIED BY app_password;
ALTER USER schema_user GRANT CONNECT THROUGH app_user;

En este caso app_user operaría sin restricción sobre los objetos del esquema como si se tratase de éste usuario. Pero y si los queremos rentringir?

--Limitar privilegios para un ROL específico.
alter user schema_owner grant connect through app_user with role rol_aplicación;

-- Deshabilitar un rol en específico.
alter user schema_owner grant connect through app_user with role all except rol_modificacion;

-- Deshabilitar todos los roles.
alter user schema_owner grant connect through app_user with no roles;

-- Forzar autenticación para authenticated roles.
alter user schema_owner grant connect through app_user with role rol_aplicación authentication required;

Ahora app_user puede conectarse a la base de datos como si fuera schema_user utilizando una sintaxis especial.

sqlplus app_user[schema_user]/app_password@database

En esta conexión:

  • app_user es el proxy user.

  • schema_user es el usuario proxied.

  • app_password es la contraseña de app_user.

Verificación de la Configuración

Para verificar la configuración del proxy user, se puede ejecutar la siguiente consulta en Oracle:

SELECT * FROM DBA_PROXIES WHERE PROXY = 'APP_USER';
SELECT * from proxy_users;

En resumen, los proxy users en Oracle son una herramienta muy potente para la gestión de permisos y la seguridad.