Bonjour,
je suis en train de mettre en place une stratégie de VPD qui me permettrait de rajouter un prédicat dans la clause WHERE des requêtes effectuées sur certaines tables.
j'ai défini un package me permettant de gérer les variables de mon contexte.
J'ai défini
J'ai également crée un package me permettant de génerer les predicats en fonction de la valeur de mon contexte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 -- creation of PRUNING context DROP CONTEXT PRUNING; CREATE CONTEXT PRUNING using vpd_context; -- package used by the context create or replace package vpd_context as procedure set_comar(v_comar in varchar2); procedure clear_pruning; end; / -- package body -- we have to remember that the procedures of this package are the only ones that can change context settings create or replace package body vpd_context is -- Set the value of COMAR variable in the PRUNING context PROCEDURE set_comar(v_comar in varchar2) IS BEGIN dbms_session.set_context('PRUNING', 'COMAR', v_comar); END set_comar; -- Delete values of all variables in the pruning context PROCEDURE clear_pruning IS BEGIN dbms_session.clear_context('PRUNING'); END clear_pruning; END vpd_context; /
Il me reste à créer ma policy et je voulais savoir comment appliquer la même fonction de génération de predicats à plusieurs tables sans avoir à définir autant de policies que de tables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 -- creating the package responsible for generating the predicates create or replace package get_predicates as function get_comar (owner varchar2, object_name varchar2) return varchar2; -- other functions might be added here for DELETE or UPDATE end get_predicates; / create or replace package body get_predicates as FUNCTION GET_COMAR (owner varchar2, object_name varchar2) return varchar2 is ret_predicate varchar2(1000); -- part of the where clause BEGIN ret_predicate := 'COMAR = ' || sys_context('PRUNING','COMAR'); --ret_predicate := 'COMAR in (' || sys_context('PRUNING','COMAR') || ')'; END GET_COMAR; -- other functions might be added here for DELETE or UPDATE end get_predicates; /
Partager