Make moral judgements
Chapter 5: Seminars and Case Studies
5.2 Testing the proposed framework
El algoritmo para la generaci´on de c´odigo, es simple; estos son los pasos que se siguen para generar c´odigo:
1. La consola recibe como par´ametros de entrada el template de especificaci´on de la pol´ıtica de acceso.
2. Los par´ametros de entrada de la consola son complementados con los nombres del paquete, funci´on de acceso y las cuentas administradoras 1 y 2 (en caso de requerirlas).
3. Al iniciar la generaci´on de c´odigo, se toma el c´odigo-esqueleto contenido en la consola y se complementa con los par´ametros de la misma.
4. El proceso de generaci´on de c´odigo puede identificar si la tabla que se est´a pro- tegiendo contiene o no en su estructura al atributo de clasificaci´on, y en base a esto decide qu´e c´odigo-esqueleto utilizar.
5. La salida de este proceso es un script, el cu´al contiene las instrucciones necesarias para la conexi´on a la base de datos, la compilaci´on del paquete (que contiene la funci´on de acceso) y la implementaci´on de la pol´ıtica de acceso en la base de datos.
Es un algoritmo muy sencillo pero eficaz; a continuaci´on v´ease c´omo se genera el c´odigo.
4.6.3.
¿C´omo Genera el C´odigo?
La consola, contiene el esqueleto para poder generar el c´odigo, es decir, senten- cias de PL/SQL predefinidas y que son complementadas con los par´ametros que se proporcionan en la consola. Las sentencias predefinidas que contiene la consola son las siguientes (v´ease la figura 4.15 para ver las sentencias predefinidas):
Como los par´ametros de la funci´on de acceso son dos y deben de tener siempre los nombres SCHEMA y OBJECT, tambi´en est´an incluidos como las sentencias predefinidas.
La declaraci´on de la variable donde se retorna el predicado, las sentencias donde obtiene valores y el retorno (ver l´ıneas 7, 11,14 y19 figura 4.15).
Otras sentencias predefinidas son aquellas en las que se hace la validaci´on de que si el usuario es el due˜no de la tabla protegida (SCHEMA) o alguna cuenta administradora (ver l´ınea 9 y 10 de la figura 4.15).
De las sentencias donde se construye el predicado extra (l´ınea 14, 15 y 16 figura 4.15), s´olo se predefinen aquellas que no est´an ligadas con la tabla de clasificaci´on. Las sentencias de fin del paquete.
En este momento es usado el template de especificaci´on de la pol´ıtica de acceso, que aporta los valores de la mayor´ıa de los par´ametros de la consola de generaci´on de c´odigo; para este caso v´ease como ejemplo c´omo se genera para la pol´ıticaSELECT DIRECCIONES y tambi´en v´ease el template que se desarroll´o para dicha pol´ıtica en la tabla 4.5. Dicho esto, v´ease la figura 4.17, que muestra los par´ametros que se proporcionaron a la consola para generar el c´odigo.
Figura 4.17: Consola con Par´ametros.
Al generar el c´odigo (click en el bot´on Genera C´odigo, figura 4.17), los valores de los par´ametros son puestos en los lugares en donde hacen falta dentro del esqueleto para completar un paquete v´alido y la ejecuci´on del paquete DBMS RLS para crear la funci´on de acceso e implementar la pol´ıtica respectivamente. La figura 4.18 mues- tra c´omo queda la generaci´on del c´odigo usando los par´ametros de la consola que se muestran en la figura 4.17.
CREATE OR REPLACE PACKAGE ACCESO_DEPTO IS
FUNCTION F_SELECT(SCHEMA IN VARCHAR2, OBJECT IN VARCHAR2) RETURN VARCHAR2; END ACCESO_DEPTO;
/
CREATE OR REPLACE PACKAGE BODY ACCESO_DEPTO IS
FUNCTION F_SELECT(SCHEMA IN VARCHAR2, OBJECT IN VARCHAR2) RETURN VARCHAR2 IS PREDICATE VARCHAR2(2000); BEGIN IF SYS_CONTEXT(’USERENV’,’SESSION_USER’) = SCHEMA OR SYS_CONTEXT(’USERENV’,’SESSION_USER’) = ’SYS’ THEN PREDICATE := ’1 = 1’; ELSE
IF OBJECT = ’DIRECCIONES’ THEN
PREDICATE := OBJECT ||’_DEPTO IN’ || ’(SELECT DEPTO
FROM PERMISOS_USUARIO
WHERE USUARIO = SYS_CONTEXT(’’USERENV’’,’’SESSION_USER’’))’ ; END IF;
RETURN PREDICATE; END; END ACCESO_DEPTO; / EXEC DBMS_RLS.ADD_POLICY(’SYSTEM’,’DIRECCIONES’,’SELECT_DIRECCIONES’, ’SYSTEM’,’ACCESO_DEPTO.F_SELECT’,’SELECT’,TRUE);
Figura 4.18: Paquete Generado.
Es as´ı como los par´ametros de la consola complementan este esqueleto y se permite la construcci´on del paquete que a su vez contiene a la funci´on de acceso. Tambi´en se genera la l´ınea de comando para implementar la pol´ıtica de acceso en la base de datos con el paquete DBMS RLS. Los par´ametros del mismo son tomados tambi´en de la consola (v´ease la figura 4.14 para ejemplificar):
Par´ametro 1. Nombre del due˜no del esquema de la tabla. SYSTEM. Par´ametro 2. Nombre de la tabla a proteger. DIRECCIONES.
Par´ametro 3. Nombre de la pol´ıtica de acceso. SELECT DIRECCIONES. Par´ametro 4. Nombre del esquema due˜no de la funci´on de acceso. SYSTEM. Par´ametro 5. Nombre de la funci´on de acceso. ACCESO DEPTO.F SELECT. Par´ametro 6. Operaci´on DML. Para este caso ser´a SELECT porque s´olo para esta operaci´on es generado el c´odigo.
Par´ametro 7. Indicador para activar la pol´ıtica de acceso. Siempre ser´a TRUE, ya que se desea que la pol´ıtica est´e activa.
De esta manera se le dan valores a los par´ametros que se necesita en el paquete DBMS RLS.ADD POLICY para generar la l´ınea de comando, implementar la pol´ıtica de acceso en la base de datos.