RLS : Securité au niveau de ligne dans OracleDate de publication : le 26 Septembre 2005
Dans cet Article
I. Introduction au RLS II. Utilisation du RLS II-A. Le paramètre update_check II-B. Les regles RLS statiques III. RLS dans Oracle 10g IV. Dépannage I. Introduction au RLS
RLS ou VPD consistent à personnaliser la façon de voir une table par plusieurs utilisateurs
en limitant l'accès sur certains lignes de colonnes d'une table.
On commence par un exemple simple, en créant une table SALAIRES sous l'utilisateur DVP :
On veut limiter l'accés à l'utilisateur DVP d'acceder au données du champ SAL qui sont plus grand
à 70000 dans la table SALAIRES. Si l'utilisateur DVP lance la requête suivant :
On veut que le RLS transforme la requête d'une manière transparente en :
Avant tout, on doit crée une fonction qui construit et renvois cette predicat en une chaine de caractères.
Ici on vérifie que la fonction retourne la valeur desirée :
Dans l'etape suivante, on crée une methode de securité qui va définir quand et comment
Le predicat applique l'instruction.
Donc, on a ajoute une methode nommé SALAIRES_POLICY dans la table SALAIRES qui appartient à
l'utilisateur DVP. Cette methode doit appliquer le filtre de la fonction SALAIRES_DISPO qui appartient à
l'utilisateur DVP chaque fois qu'un utilisateur effectue une opération INSERT, UPDATE, DELETE ou SELECT.
Sous le compte DVP :
Sous le compte SYS :
On remarque, que l'utlisateur DVP voit que 2 lignes et que l'utlisateur SYS voit 5 lignes.
Le resultat sera pareil pour les commandes UPDATE et DELETE.
Quand un utilisateur opère sur une table qui est sous le contrôle du RLS, la reqûete SQL
est intercepté et re-écrite par le moteur de la base, en ajoutant le resultat
de la fonction.
II. Utilisation du RLSII-A. Le paramètre update_check
Regardons l'exemple suivante :
Seulement deux lignes sont modifiés.
On remarque qu'après la première mise a jours, toutes les colonnes de la table deviennent invisibles.
Ce qui pose une situation de confusion : car le fait de lancer une requête peut modifier l'accès sur
les lignes. Pour contrer ce comportement, on utilise le paramètre update_check.
Sous le compte SYS on remet les salaires qu'on a modifiés
Et sous le compte DVP on'aura :
On supprime la regle. Attention il faut avoir le privilège EXECUTE ON DBMS_RLS pour effectuer
cette opération.
Mainetant on ajoute le paramètre update_check en lui attribuant la valeur TRUE.
Après que la regle soit placé sur la table
II-B. Les regles RLS statiques
Pour eviter que la fontion soit appelé à chaque fois qu'on lance une requête,
on a jouté alors un nouveau paramètre static_policy et on le fixe à TRUE. Ce qui va mettre
le resultat de la fonction dans la mémoire cache.
La methode statique peut augmenter les performances, mais elle peut aussi introduire
de nouveaux bugs.
Si l'attribu dérive ou depends d'un changement de valeur, comme le temps ou l'adresse IP,
alors, on devrait définir une methode dynamique au lieu d'une methode statique.
III. RLS dans Oracle 10gIV. Dépannage
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|