J. Akoka - I. Wattiau 1 CONTRÔLE D’INTEGRITE CONTRÔLE D’INTEGRITE ET SECURITE E
J. Akoka - I. Wattiau 1 CONTRÔLE D’INTEGRITE CONTRÔLE D’INTEGRITE ET SECURITE ET SECURITE DANS LES BASES DE DANS LES BASES DE DONNEES DONNEES J. Akoka – I. Wattiau J. Akoka - I. Wattiau 2 Rôle Rôle : : – Faire un système fiable et performant – Assurer l'intégrité des données Notions de base Notions de base – Contrainte d'intégrité : assertion qui doit toujours être vérifiée par les données de la base. – Base de données cohérente : dont l'ensemble des contraintes d'intégrité est vérifié J. Akoka - I. Wattiau 3 Quelques types de Quelques types de contraintes contraintes o contraintes de domaine o contraintes d’obligation o dépendances fonctionnelles o dépendances référentielles ou d'inclusion o contraintes arithmétiques o contraintes d'intégrité temporelles Transaction : unité de traitement séquentiel qui, appliquée à une base de données cohérente, restitue une base de données cohérente J. Akoka - I. Wattiau 4 Définition des contraintes d’intégrité À l’aide du langage de définition de données (SQL) pour la plupart des contraintes A l’aide de triggers dans le cas contraire J. Akoka - I. Wattiau 5 Sécurité des données Sécurité des données Objectif : Objectif : ASSURER LA CONFIDENTIALITE Principe : Principe : on identifie les utilisateurs par un nom ou un numéro on vérifie l'identité (exemple : mot de passe) on définit des autorisations 1er exemple : une matrice d'autorisation 1er bit : lecture 0 accès interdit 2ème bit : écriture 1 accès autorisé c l i e n t s a l a r i é p r o d u i t D U P O N T D U R A N T D U B O I S 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 J. Akoka - I. Wattiau 6 2ème exemple : 2ème exemple : des niveaux d'autorisation Niveau 1 : salarié Niveau 2 : client Niveau 3 : produit DUPONT (PDG) : niveau 1 DURANT (rel. client) : niveau 2 DUBOIS (client) : niveau 3 Niveau du sujet accédant <= niveau de l’objet accédé Modèle MAC (Mandatory Access Control) 1. Les triggers J. Akoka - I. Wattiau 8 Création de triggers Création de triggers Exemple : CREATE TRIGGER nom BEFORE DELETE OR INSERT OR UPDATE ON table FOR EACH ROW WHEN (new.empno>0) DECLARE ............ <<<<déclarations>>>> BEGIN ............ <<<< bloc d'instructions PL/SQL>>>> END; J. Akoka - I. Wattiau 9 Le nom du trigger Le nom du trigger doit être unique dans un même schéma peut être le nom d'un autre objet (table, vue, procédure) mais à éviter J. Akoka - I. Wattiau 10 Option BEFORE/AFTER/ Option BEFORE/AFTER/ INSTEAD OF INSTEAD OF elle précise le moment de l'exécution du trigger les triggers AFTER row sont plus efficaces que les BEFORE row parce qu'ils ne nécessitent pas une double lecture des données le trigger INSTEAD OF permet par exemple de contourner l’interdiction de mise à jour au travers de vues J. Akoka - I. Wattiau 11 Définition du trigger Définition du trigger Elle comprend le type d'instruction SQL qui déclenche le trigger : DELETE, INSERT, UPDATE On peut en avoir une, deux ou les trois. Pour UPDATE, on peut spécifier une liste de colonnes. Dans ce cas, le trigger ne se déclenchera que si l'instruction UPDATE porte sur l'une au moins des colonnes précisée dans la liste. S'il n'y a pas de liste, le trigger est déclenché pour toute instruction UPDATE portant sur la table. J. Akoka - I. Wattiau 12 La définition du trigger précise la table associée au trigger : une et une seule table pas une vue. J. Akoka - I. Wattiau 13 Types de triggers Types de triggers Le type d’un trigger détermine : quand ORACLE déclenche le trigger : BEFORE : avant l’événement déclencheur AFTER : après l’événement déclencheur INSTEAD OF : à la place de l’événement déclencheur combien de fois ORACLE déclenche le trigger. Le type du trigger est défini par l’utilisation de l’une ou l’autre des options suivantes : BEFORE, AFTER, INSTEAD OF, FOR EACH ROW J. Akoka - I. Wattiau 14 ORACLE propose deux types de triggers les triggers lignes qui se déclenchent individuellement pour chaque ligne de la table affectée par le trigger, les triggers globaux qui sont déclenchés une seule fois. Si l'option FOR EACH ROW est spécifiée, c'est un trigger ligne, sinon c'est un trigger global. J. Akoka - I. Wattiau 15 Pour les triggers lignes, on peut introduire une restriction sur les lignes à l'aide d'une expression logique SQL : c'est la clause WHEN : Cette expression est évaluée pour chaque ligne affectée par le trigger. Le trigger n'est déclenché sur une ligne que si l'expression WHEN est vérifiée pour cette ligne. L'expression logique ne peut pas contenir une sous-question. Par exemple, WHEN (new.empno>0) empêchera l'exécution du trigger si la nouvelle valeur de EMPNO est 0, négative ou NULL. J. Akoka - I. Wattiau 16 Le corps du trigger est un bloc PL/SQL : Il peut contenir du SQL et du PL/SQL. Il est exécuté si l'instruction de déclenchement se produit et si la clause de restriction WHEN, le cas échéant, est évaluée à vrai. Il est différent pour un trigger ligne et pour un trigger global. J. Akoka - I. Wattiau 17 Les noms de corrélation Dans un trigger ligne, on doit pouvoir accéder aux ancienne et nouvelle valeurs de colonne de la ligne. Les noms de corrélation permettent de désigner ces deux valeurs : un nom pour l'ancienne et un pour la nouvelle. Si l'instruction de déclenchement du trigger est INSERT, seule la nouvelle valeur a un sens. Si l'instruction de déclenchement du trigger est DELETE, seule l'ancienne valeur a un sens. J. Akoka - I. Wattiau 18 La nouvelle valeur est appelée :new.colonne L'ancienne valeur est appelée :old.colonne Exemple : IF :new.salaire < :old.salaire ........ Si un trigger ligne BEFORE modifie la nouvelle valeur d'une colonne, un éventuel trigger ligne AFTER déclenché par la même instruction voit le changement effectué par le trigger BEFORE. J. Akoka - I. Wattiau 19 L'option REFERENCING : Si une table s'appelle NEW ou OLD, on peut utiliser REFERENCING pour éviter l'ambiguïté entre le nom de la table et le nom de corrélation. Exemple : Exemple : CREATE TRIGGER nomtrigger BEFORE UPDATE ON new REFERENCING new AS newnew FOR EACH ROW BEGIN :newnew.colon1:= TO_CHAR(:newnew.colon2); END; J. Akoka - I. Wattiau 20 Les prédicats conditionnels INSERTING, DELETING et UPDATING Quand un trigger comporte plusieurs instructions de déclenchement (par exemple INSERT OR DELETE OR UPDATE), on peut utiliser des prédicats conditionnels (INSERTING, DELETING et UPDATING) pour exécuter des blocs de code spécifiques pour chaque instruction de déclenchement. Exemple : CREATE TRIGGER ... BEFORE INSERT OR UPDATE ON employe ....... BEGIN ...... IF INSERTING THEN ....... END IF; IF UPDATING THEN ........ END IF; ...... END; J. Akoka - I. Wattiau 21 UPDATING peut être suivi d'un nom de colonne : CREATE TRIGGER ... BEFORE UPDATE OF salaire, commission ON employe ....... BEGIN ...... IF UPDATING ('salaire') THEN ........ END IF; ...... END; J. Akoka - I. Wattiau 22 Nombre de triggers par table On peut avoir au maximum un trigger de chacun des types suivants pour chaque table : BEFORE UPDATE row BEFORE DELETE row BEFORE INSERT statement BEFORE INSERT row BEFORE UPDATE statement BEFORE DELETE statement AFTER UPDATE row AFTER DELETE row AFTER INSERT statement AFTER INSERT row AFTER UPDATE statement AFTER DELETE statement. Même pour UPDATE, on ne peut pas en avoir plusieurs avec des noms de colonnes différents. J. Akoka - I. Wattiau 23 Instructions SQL autorisées les instructions du LMD sont autorisées les instructions du LDD ne sont pas autorisées les instructions de contrôle de transaction (ROLLBACK, COMMIT) ne sont pas autorisées. J. Akoka - I. Wattiau 24 Ordre de traitement des lignes On ne peut pas gérer l'ordre des lignes traitées par une instruction SQL. On ne peut donc pas créer un trigger qui dépende de l'ordre dans lequel les lignes sont traitées. Triggers en cascade Un trigger peut provoquer le déclenchement d'un autre trigger. ORACLE autorise jusqu'à 32 triggers en cascade à un moment donné. J. Akoka - I. Wattiau 25 Activation d’un trigger Un trigger peut être activé ou désactivé. S’il est désactivé, ORACLE le stocke mais l’ignore. On peut désactiver un trigger si : E il référence un objet non disponible E on veut charger rapidement un volume de données important ou recharger des données déjà contrôlées. Par défaut, un trigger est activé dès sa création. Pour désactiver un trigger, on utilise l’instruction ALTER TRIGGER avec l’option DISABLE : ALTER TRIGGER nomtrigger DISABLE; On peut désactiver tous les triggers associés à une table uploads/Voyage/ controled-integri-ten-v-2008.pdf
Documents similaires
-
17
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 15, 2021
- Catégorie Travel / Voayage
- Langue French
- Taille du fichier 0.4436MB