Simulando Virtual Private Databases
Oracle tiene una característica de seguridad llamada Virtual Private Databases (VPDs) que viene incluida como parte del paquete Oracle Avanced Security. Las Virtual Private Databases permiten a los administradores de la base de datos crear procedimientos almacenados que de forma automática agregan una cláusula where a una consulta.
Por poner un ejemplo, si un usuario inicia sesión en una Virtual Private Databases con cualquier herramienta cliente que le permita el acceso y ejecuta la consulta SELECT * FROM DIVISA_CAMBIO podrá obtener resultados completamente distintos a los de otro usuario que haya accedido. Es decir, podríamos limitar el acceso a la tabla para que cada usuario únicamente pueda ver los cambios de divisa de su continente o zona de países.
En el resto de bases de datos, aunque esta funcionalidad no esta implementada, podremos simularla en base a vistas sobre la tabla a consultar y el usuario de conexión.
Por ejemplo:
- Empezamos creando la tabla de permisos. En esta tabla indicaremos los usuarios de base de datos y el filtro o filtros que serán aplicados en la vista final.
CREATE TABLE USERS_FILTERS
(USER VARCHAR(50),
USER_DESC VARCHAR(255),
FILTER_1 VARCHAR(5),
FILTER_2 VARCHAR(5));
- En esta tabla insertamos dos usuarios y aplicamos los filtros a los que tienen permiso sobre la vista final. Estos usuarios deberán estar dados de alta en la base de datos con los permisos oportunos:
INSERT INTO USER_FILTERS (USER, USER_DESC, FILTER_1, FILTER_2)
VALUES ('usurioroot', 'usuario root', '00001', '20000');
INSERT INTO USER_FILTERS (USER, USER_DESC, FILTER_1, FILTER_2)
VALUES ('usuriopub', 'usuario pub', '00002', '30000');
- Supongamos ahora que en nuestra tabla de origen llamada DATOS_ORIGEN tenemos la siguiente información:
id_key id_pais desc_pais id_empresa des_empresa ingresos
---------------------------------------------------------------------
1 00001 España 20000 Sua.SL 24.500
2 00001 España 30000 Fax.SA 44.000
3 00002 Portugal 30000 Trans.SA 14.000
- Creamos ahora la vista a la cual accederán los usuarios:
CREATE VIEW VISTA_DATOS_ORIGEN (ID_PAIS, DESC_PAIS, INGRESOS) AS
SELECT ID_PAIS, DESC_PAIS, SUM(INGRESOS)
FROM DATOS_ORIGEN O
INNER JOIN USER_FILTERS F ON
F.FILTER_01=ID_PAIS AND
F.FILTER_02=ID_EMPRESA AND
F.USER = USER <--- USUARIO DE BBDD
GROUP BY ID_PAIS, DESC_PAIS;
Ahora, si hacemos una prueba, entrenado con un usuario y otro (usurioroot o usuriopub) y ejecutando la consulta SELECT * FROM VISTA_DATOS_ORIGEN nos devolverá unos resultados u otros.
La base de las VPDs es esta, ahora experimentad vosotros y buscadle utilidad....
Comentarios