
Dominando el RBAC Nativo de Oracle – Parte 2

4. Conceptos Avanzados del RBAC Nativo de Oracle
La implementación RBAC de Oracle ofrece características avanzadas que proporcionan mayor flexibilidad y granularidad en la gestión del control de acceso. Exploremos algunos de estos conceptos avanzados.
4.1 Jerarquías de Roles
Las jerarquías de roles permiten establecer relaciones de padre-hijo entre roles. Un rol hijo tiene los mismos privilegios que su rol padre. Además, el rol hijo recibe cualquier privilegio adicional otorgado específicamente a él. Esto permite la creación de una estructura jerárquica de roles, simplificando la gestión de políticas de control de acceso complejas.
Para crear una jerarquía de roles en Oracle, se utiliza la instrucción GRANT para otorgar un rol a otro rol. Por ejemplo:
-- Crear un rol padre llamado "manager"
CREATE ROLE manager;
-- Otorgar privilegios al rol "manager"
GRANT SELECT, INSERT, UPDATE ON employees TO manager;
-- Crear un rol hijo llamado "sales_manager"
CREATE ROLE sales_manager;
-- Otorgar el rol "manager" al rol "sales_manager"
GRANT manager TO sales_manager;
-- Otorgar privilegios adicionales específicos para el rol "sales_manager"
GRANT SELECT ON sales TO sales_manager;
En este ejemplo, creamos un rol padre llamado “manager” y le otorgamos privilegios en la tabla “employees”. Luego, creamos un rol hijo llamado “sales_manager” y le otorgamos el rol “manager”. El “sales_manager” tiene todos los mismos privilegios que el “manager”, más privilegios adicionales relacionados con las ventas.
Las jerarquías de roles simplifican la gestión de privilegios al establecer privilegios básicos en niveles superiores y personalizarlos en niveles inferiores. Esto reduce la redundancia y facilita el mantenimiento y la actualización de las políticas de control de acceso.
4.2 Roles de Aplicación Seguros
Estos roles seguro dependen típicamente de la ejecución exitosa de un paquete o función PL/SQL.
Para crear un rol de aplicación seguro en Oracle, use la instrucción CREATE ROLE con la cláusula IDENTIFIED USING. Este paquete o función especifica qué rol debe ser habilitado. Por ejemplo:
-- Crear un paquete PL/SQL para verificar condiciones
CREATE OR REPLACE PACKAGE security_pkg IS
FUNCTION check_access RETURN BOOLEAN;
END security_pkg;
/
-- Crear un rol de aplicación seguro
CREATE ROLE secure_role IDENTIFIED USING security_pkg.check_access;
-- Otorgar privilegios al rol de aplicación seguro
GRANT SELECT ON sensitive_data TO secure_role;
En este ejemplo, creamos un paquete PL/SQL llamado “security_pkg” que contiene una función “check_access”. Esta función determina si el rol de aplicación seguro debe activarse. Considera factores como la dirección IP del usuario, la hora actual y reglas específicas de la aplicación.
A continuación, creamos un rol seguro llamado “secure_role” usando la cláusula IDENTIFIED USING y la especificación “security_pkg.check_access”. El rol solo se habilita cuando la función “check_access” devuelve TRUE.
Otorgamos acceso especial al rol de aplicación seguro, por lo que los usuarios con el rol y que cumplen los requisitos pueden ver datos sensibles.
Los roles de aplicación seguros mejoran las medidas generales de seguridad al activar los roles solo cuando se cumplen ciertas condiciones, añadiendo una capa extra de control. Esto evita el acceso no autorizado y añade un nivel adicional de control más allá de los métodos tradicionales de acceso basado en roles.
4.3 Control de Acceso de Granularidad Fina
El control de acceso de granularidad fina en el RBAC nativo de Oracle permite decidir quién puede acceder a los datos en función de condiciones o atributos específicos en detalle. Esto significa que puede controlar el acceso a los datos a un nivel extremadamente granular.
Puede especificar exactamente quién tiene permiso para ver o modificar ciertos datos. El control de acceso de granularidad fina le da la capacidad de restringir el acceso en función de criterios o atributos específicos. Oracle ofrece herramientas como VPD y OLS para un control de acceso preciso en bases de datos.
VPD le permite agregar reglas de seguridad a las consultas SQL para una tabla o vista. Estas políticas pueden imponer seguridad a nivel de fila en función de los atributos del usuario o el contexto de la aplicación. Por ejemplo:
-- Crear una función de política VPD
CREATE OR REPLACE FUNCTION policy_func (
schema_var IN VARCHAR2,
table_var IN VARCHAR2
)
RETURN VARCHAR2
IS
BEGIN
RETURN 'department_id = SYS_CONTEXT(''USERENV'', ''DEPARTMENT_ID'')';
END;
/
-- Aplicar la política VPD a una tabla
BEGIN
DBMS_RLS.ADD_POLICY (
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'EMP_POLICY',
function_schema => 'HR',
policy_function => 'POLICY_FUNC',
statement_types => 'SELECT,UPDATE,DELETE',
update_check => TRUE
);
END;
/
En este ejemplo, creamos una función de política VPD llamada “policy_func”. Esta función genera una regla según el ID de departamento del usuario. La función devuelve una condición que asegura que los usuarios solo pueden acceder a los registros que pertenecen a su propio departamento.
A continuación, aplicamos la política VPD a la tabla “EMPLOYEES” con el procedimiento DBMS_RLS.ADD_POLICY. Especificamos la función de la política y los tipos de instrucciones a las que se aplica.
La política VPD permite a los usuarios acceder y modificar registros que coincidan con su ID de departamento. Esto proporciona un control preciso sobre el acceso a nivel de fila.
Oracle Label Security (OLS) es otra característica que permite el control de acceso de granularidad fina basado en etiquetas de clasificación de datos. OLS permite etiquetar filas de datos y controlar el acceso en función de las etiquetas del usuario. Esto es particularmente útil en entornos con datos sensibles que requieren estricta confidencialidad y segregación de datos.
El control de acceso de granularidad fina mejora el RBAC al agregar niveles adicionales de seguridad. Permite imponer reglas de acceso basadas en atributos o condiciones de datos específicos.
Control de Acceso Basado en Atributos (ABAC)
ABAC es una forma de controlar el acceso considerando los atributos del usuario, los atributos del recurso y el entorno para determinar los permisos de acceso. ABAC proporciona un enfoque más dinámico y flexible en comparación con el RBAC tradicional.
En ABAC, las políticas de control de acceso se definen en función de atributos en lugar de roles. Los atributos son características que pueden incluir detalles del usuario, detalles del recurso y detalles del entorno.
Los detalles del usuario pueden incluir título del puesto o departamento. Los detalles del recurso pueden incluir clasificación de datos o nivel de sensibilidad. Los detalles del entorno pueden incluir la hora del día o la ubicación.
Oracle admite ABAC a través de diversas características y tecnologías, como Oracle Entitlements Server (OES) y Oracle Access Manager (OAM). Estas soluciones permiten definir políticas basadas en atributos y hacerlas cumplir en diferentes aplicaciones y recursos.
A continuación, se muestra un ejemplo de cómo se puede implementar ABAC utilizando Oracle Entitlements Server:
-- Definir atributos de usuario
CREATE ATTRIBUTE USER_ATTRIBUTES.JOB_TITLE VARCHAR(255);
CREATE ATTRIBUTE USER_ATTRIBUTES.DEPARTMENT VARCHAR(255);
CREATE ATTRIBUTE USER_ATTRIBUTES.SECURITY_CLEARANCE VARCHAR(255);
-- Definir atributos de recurso
CREATE ATTRIBUTE RESOURCE_ATTRIBUTES.CLASSIFICATION VARCHAR(255);
CREATE ATTRIBUTE RESOURCE_ATTRIBUTES.SENSITIVITY_LEVEL VARCHAR(255);
-- Definir una política ABAC
CREATE POLICY ACCESS_POLICY
GRANT VIEW ON RESOURCE
WHERE RESOURCE_ATTRIBUTES.CLASSIFICATION = 'CONFIDENTIAL'
AND USER_ATTRIBUTES.SECURITY_CLEARANCE >= 'SECRET'
AND USER_ATTRIBUTES.DEPARTMENT = 'FINANCE';
En este ejemplo, hablamos sobre títulos de trabajo y departamentos de los usuarios, así como sobre clasificaciones y niveles de sensibilidad de los recursos.
Tenemos una política llamada “ACCESS_POLICY”. Esta política solo permite a los usuarios con autorización de seguridad ‘SECRET’ y en el departamento de ‘FINANCE’ ver recursos ‘CONFIDENTIAL’.
Las políticas ABAC pueden ser más complejas e incluir múltiples atributos y condiciones. El motor de evaluación de políticas examina los detalles del usuario, recurso y entorno para determinar si se debe otorgar acceso.
ABAC complementa al RBAC al proporcionar un enfoque más dinámico y detallado para el control de acceso. Permite decisiones de control de acceso más flexibles y conscientes del contexto basadas en una combinación de atributos.
6. Listas de Control de Acceso (ACLs)
Las Listas de Control de Acceso (ACLs) son otro mecanismo para controlar el acceso a recursos. Las ACLs se utilizan para especificar permisos para usuarios individuales o grupos en objetos o recursos específicos.
En Oracle, las ACLs se utilizan a menudo para gestionar el acceso a recursos de red externos como servicios web o bases de datos remotas. Oracle proporciona un mecanismo de ACL incorporado a través del paquete DBMS_NETWORK_ACL_ADMIN.
A continuación, se muestra un ejemplo de cómo crear una ACL y otorgar permisos usando el paquete DBMS_NETWORK_ACL_ADMIN:
-- Crear una ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'my_acl.xml',
description => 'ACL para acceder a un servicio web externo',
principal => 'HR_USER',
is_grant => TRUE,
privilege => 'connect'
);
END;
/ -- Asignar la ACL a un host de red BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'my_acl.xml',
host => 'www.example.com',
lower_port => 80,
upper_port => 80
);
END;
/
En este ejemplo, creamos una ACL llamada “my_acl.xml” utilizando el procedimiento DBMS_NETWORK_ACL_ADMIN.CREATE_ACL. Especificamos el principal (usuario o rol) al que se aplica la ACL, en este caso, ‘HR_USER’. También establecemos el permiso a ‘connect’, lo que permite al principal establecer una conexión con el recurso externo.
A continuación, asignamos la ACL a un host de red específico utilizando el procedimiento DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL. Especificamos el nombre de la ACL, el nombre del host o la dirección IP, y el rango de puertos al que se aplica la ACL.
Con esta ACL en su lugar, el ‘HR_USER’ podrá conectarse al host de red específico en el rango de puertos designado.
Las ACLs ayudan a controlar el acceso a recursos externos en detalle, trabajando junto con los mecanismos de control de acceso de la base de datos. Son útiles para gestionar recursos de red y garantizar que solo usuarios o aplicaciones autorizadas puedan acceder a ellos.
Esto concluye la Parte 2. En la última Parte 3 cubriremos los Roles en más detalle.
¿Busca soluciones profesionales de seguridad de bases de datos? Únase a nosotros en línea para una sesión demo completa sobre la gestión de Usuarios y Roles en DataSunrise, que ofrece soluciones avanzadas para bases de datos Oracle. Descubra cómo simplificar el control de acceso y mejorar la seguridad con nuestra plataforma intuitiva.