Dominando el RBAC Nativo de Oracle: Una Guía Integral – Parte 2
4. Conceptos Avanzados del RBAC Nativo de Oracle
La implementación del RBAC de Oracle ofrece características avanzadas que proporcionan una flexibilidad y granularidad adicionales en la gestión del control de acceso. Vamos a explorar algunos de estos conceptos avanzados.
4.1 Jerarquías de Roles
Las jerarquías de roles le permiten establecer relaciones de padres e hijos entre roles. Un rol hijo tiene los mismos privilegios que su rol padre. El rol hijo también recibe los privilegios adicionales que se le otorguen específicamente. 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, utilice la declaració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 gerente de ventas tiene todos los mismos privilegios que un gerente, más privilegios adicionales relacionados con 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
Normalmente, estas condiciones dependen de la ejecución exitosa de un paquete o función PL/SQL.
Para crear un rol de aplicación seguro en Oracle, utilice la declaración CREATE ROLE con la cláusula IDENTIFIED USING. Este paquete o función especifica qué rol debería habilitarse. 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 debería activarse considerando 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” utilizando 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, de modo que los usuarios con el rol y que cumplan los requisitos puedan ver datos sensibles.
Los roles de aplicación seguros mejoran las medidas de seguridad generales al activar roles solo cuando se cumplen ciertas condiciones, añadiendo una capa extra de control más allá de los métodos de acceso basados en roles tradicionales.
4.3 Control de Acceso Granular
El control de acceso granular en el RBAC nativo de Oracle le permite decidir quién puede acceder a los datos basándose en condiciones o atributos específicos. Esto significa que puede controlar el acceso a los datos a un nivel extremadamente detallado.
Puede especificar exactamente quién tiene permiso para ver o modificar ciertos datos. El control de acceso granular le da la capacidad de restringir el acceso basándose en 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 consultas SQL para una tabla o vista. Estas políticas pueden imponer seguridad a nivel de fila basándose en atributos del usuario o 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 basada en la ID del departamento del usuario. La función devuelve una condición que asegura que los usuarios solo puedan acceder a registros que pertenezcan a su propio departamento.
A continuación, aplicamos la política VPD en la tabla “EMPLOYEES” con el procedimiento DBMS_RLS.ADD_POLICY. Especificamos la función de política y los tipos de declaraciones a los que se aplica.
La política VPD permite a los usuarios acceder y cambiar registros que coincidan con su ID de departamento. Esto da un control preciso sobre el acceso a nivel de fila.
Oracle Label Security (OLS) es otra característica que permite el control de acceso granular basado en etiquetas de clasificación de datos. OLS le permite etiquetar filas de datos y controlar el acceso basado en 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 granular mejora el RBAC añadiendo niveles adicionales de seguridad. Permite imponer reglas de acceso basadas en atributos o condiciones específicos de los datos.
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 basadas en 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 el título del trabajo o el departamento. Los detalles del recurso pueden incluir la clasificación de datos o el 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 varias características y tecnologías, como Oracle Entitlements Server (OES) y Oracle Access Manager (OAM). Estas soluciones le permiten definir políticas basadas en atributos y aplicarlas en diferentes aplicaciones y recursos.
Aquí hay un ejemplo de cómo ABAC puede ser implementado 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 los títulos de trabajo y departamentos de los usuarios, así como las clasificaciones y niveles de sensibilidad de los recursos.
Tenemos una política llamada “ACCESS_POLICY”. Esta política solo permite a los usuarios con un “SECRET” de autorización de seguridad 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, los recursos y el entorno para determinar si se debe otorgar el acceso.
ABAC complementa el RBAC al proporcionar un enfoque más detallado y dinámico para el control de acceso. Permite tomar 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 a menudo se usan 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 utilizando 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 servicios web externos',
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 en ‘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 de host o dirección IP, y el rango de puertos al que se aplica la ACL.
Con esta ACL en su lugar, ‘HR_USER’ podrá conectarse al host de red especificado en el rango de puertos designado.
Las ACLs ayudan a controlar el acceso a recursos externos en detalle, trabajando junto con los propios mecanismos de control de acceso de la base de datos. Son útiles para gestionar recursos de red y asegurarse de que solo los usuarios o aplicaciones autorizados puedan utilizarlos.
Esto concluye la Parte 2. En la última Parte 3 vamos a cubrir los Roles con más detalle.
¿Buscas soluciones profesionales de seguridad de bases de datos? Únase a nosotros en línea para una sesión de demostración integral 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.