2. 1) Crear un paquete PL/SQL para ajustar al contexto.
CREATE OR REPLACE PACKAGE orders_ctx_pkg IS
PROCEDURE set_custnum;
END;
/
CREATE OR REPLACE PACKAGE BODY orders_ctx_pkg IS
PROCEDURE set_custnum
AS
custnum NUMBER;
WHERE cust_email = SYS_CONTEXT( ' USERENV ' , ' SESSION_USER ');
SELECT cust_no INTO custnum FROM scott.customers
END;
/
1) CREAR UN PAQUETE PL/SQL
PARA AJUSTAR AL CONTEXTO.
3. 2) CREAR UN CONTEXTO
DE LA APLICACIÓN.
CREATE OR REPLACE CONTEXT orders_ctx USING
orders_cxt_pkg;
4. 3) CREAR UN INICIO DE SESIÓN DE
ACTIVACIÓN PARA EJECUTAR E
CONTEXTO DE APLICACIÓN PL/SQL
CREATE TRIGGER set_custno_ctx_trig AFTER LOGON ON
DATABASE
BEGIN
sysadmin_vpd.orders_ctx_pkg.set_custnum;
END;
/
5. 4) CREAR LA FUNCIÓN PL/SQL
QUE GENERA EL PREDICADO.
CREATE OR REPPLACE FUNCTION get_user_orders(
schema_p IN VARCHAR2,
table_p IN VARCHAR2)
RETURN VARCHAR2
AS
orders_pred VARCHAR2 (400);
BEGIN
orders_pred := ' cust_no = SYS_CONTEXT(' ' orders_ctx' ', '
'cust_no' ') ';
RETURN orders_pred;
END;
/
6. BEGIN
DBMS_RLS.ADD_POLICY (
object_schema => 'scott',
object_name => 'orders_tab',
policy_name => 'orders_policy',
function_schema => 'sysadmin_vpd',
policy_function => 'get_user_orders',
statement_types => 'select');
END;
/
5) CREAR LA POLÍTICA PARA ASOCIAR
A LA FUNCIÓN DE LA TABLA.