IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Sécurité des transactions dans un trigger contenant plusieurs requêtes


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 66
    Points
    66
    Par défaut Sécurité des transactions dans un trigger contenant plusieurs requêtes
    Hello à tous

    Je me pose une petite question à ce sujet, voilà:

    J'ai un joli trigger dont je suis très fier, il commence par "BEGIN" et fini par "END", il contient plusieurs requêtes séparées par un point-virgule, et marche très bien a priori.
    Mais je me demandais : quid de la sécurité transactionnelle réelle quand un trigger contient plusieurs requêtes ? Cela est-il full secure ? Le "BEGIN" et le "END" sont-ils bien destinés à cela (j'ai vu des "BEGIN TRANSACTION") ?

    En effet la nature de mes requêtes suppose une sécurité transactionnelle complète, mais c'est aussi intéressant de façon générale.

    Autre question très liée : existe-t-il un moyen permettant de "tester" cette sécurité (en lançant des insertions parallèles exactement au même moment) ?

    Merci d'avance

    #Developpez

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 465
    Points : 19 454
    Points
    19 454
    Par défaut
    Salut georgie2.

    On ne met pas de "start transaction" dans un déclencheur.
    De ce fait, si vous faites un "insert" dans un script mysql, c'est à ce moment là que vous devez faire votre "start transaction".
    Il devra se terminer par un "commit" ou un "rollback" en fonction de la bonne exécution de votre "insert".

    Donc l'acceptation (commit) ou le rejet (roolback) de votre "insert" sera global.

    @+

  3. #3
    Membre confirmé Avatar de isabelle.letrong
    Femme Profil pro
    Conseil - Consultante en systèmes d'information
    Inscrit en
    Juillet 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultante en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 109
    Points : 487
    Points
    487
    Par défaut Intégrité d'une transaction dans l’exécution d'un trigger
    Bonjour georgie2,

    Quelques remarques et conseils sur la gestion transactionnelle à l'intérieur d'un trigger :

    • Un trigger peut naturellement comporter plusieurs mises à jour de tables, ces mises à jour seront validées ou invalidées soit via un commit ou rollback prononcé explicitement par 'l'invoqueur' (celui qui a provoqué l’exécution du trigger) soit via le mode autocommit .
    • Si un trigger ne doit effectivement pas comporter de 'start transaction', commit' ou 'rollback', je conseille vivement de gérer un contexte transactionnel à l'intérieur du trigger via des 'savepoint'/'rollback to savepoint'.
    • En effet, quel que soit 'l'invoqueur', le trigger doit laisser une situation propre sur le plan transactionnel : soit toutes les mises à jours ont été réalisées soit rien n'a été réalisé. 'L'invoqueur' est alors protégé contre toute non gestion d'une anomalie survenue.
    • Par ailleurs, il appartient en réalité à 'l'invoqueur' de décider de commiter ou rollbacker une transaction. En particulier on peut devoir décider de commiter une transaction, même si quelque chose s'est mal passé, notamment pour journaliser l’événement dans une table de log. Il faut donc donner à' l'invoqueur' les outils et moyens de gérer cela. Dans ce cas précis, il faut que le trigger ait :
      1. remis au propre les données qu'il a modifié (savepoint en entrée de trigger et rollback to savepoint à la détection de l'erreur),
      2. provoqué une exception pour que 'l'invoqueur' soit prévenu de du problème survenu et prenne la décision appropriée.



Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2008, 07h49
  2. [Sécurité] Sécurité des données dans $_SESSION
    Par dinozor29 dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2007, 23h19
  3. Commiter des données dans un trigger
    Par tchoimars dans le forum PL/SQL
    Réponses: 2
    Dernier message: 12/06/2007, 09h35
  4. sécurité des transactions
    Par g0up1l dans le forum Connexion aux bases de données
    Réponses: 8
    Dernier message: 25/03/2007, 13h19
  5. Gestion des erreurs dans un TRIGGER
    Par SDU64 dans le forum DB2
    Réponses: 1
    Dernier message: 18/05/2006, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo