OVH Cloud OVH Cloud

Trigger

7 réponses
Avatar
Yan
Bonjour,

Dans mon appli, une donnée peut être modifiée à de multiple endroits.
Au moment de la modif, je souhaite contrôler si l'utilisateur en a le droit.
Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur la
table en question.

Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas le
droit.

Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la table
updated), je ne pourrais inverser l'opération puisque j'aurais perdu
l'ancienne valeur.
Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
récupérer la requête SQL ayant provoqué le trigger ? Parce que si
l'utilisateur a le droit, il faut quand même que j'exécute sa requête.

Je sais pas si c'est bien clair.

Merci d'avance

7 réponses

Avatar
Boss Hog
Salut,
d'aprés ce que je crois savoir(je n'utilise pas les trigger) lors d'un
update, les ancienes valeurs sont stockées dans une table temporaire porpre
au trigger(inserted et deleted) ce qui fait que meme en utilisant le mode
AFTER tu doit pouvoir revenir à l'ancienne valeur.
@+ Boss Hog


"Yan" wrote in message
news:418f4020$0$18897$
Bonjour,

Dans mon appli, une donnée peut être modifiée à de multiple endroits.
Au moment de la modif, je souhaite contrôler si l'utilisateur en a le


droit.
Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur


la
table en question.

Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas le
droit.

Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la table
updated), je ne pourrais inverser l'opération puisque j'aurais perdu
l'ancienne valeur.
Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
récupérer la requête SQL ayant provoqué le trigger ? Parce que si
l'utilisateur a le droit, il faut quand même que j'exécute sa requête.

Je sais pas si c'est bien clair.

Merci d'avance




Avatar
Yan
Je rectifie pour AFTER, la table updated conserve les anciennes valeurs

Par contre, si vous avez des réponses concernant INSTEAD OF, ça m'intéresse
quand même

Merci


"Yan" a écrit dans le message de
news:418f4020$0$18897$
Bonjour,

Dans mon appli, une donnée peut être modifiée à de multiple endroits.
Au moment de la modif, je souhaite contrôler si l'utilisateur en a le


droit.
Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur


la
table en question.

Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas le
droit.

Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la table
updated), je ne pourrais inverser l'opération puisque j'aurais perdu
l'ancienne valeur.
Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
récupérer la requête SQL ayant provoqué le trigger ? Parce que si
l'utilisateur a le droit, il faut quand même que j'exécute sa requête.

Je sais pas si c'est bien clair.

Merci d'avance




Avatar
Yan
J'ai mis table updated, mais elle n'existe pas bien sûr.

Je viens de voir aussi que les anciennes valeurs sont concervées. Merci.



"Boss Hog @tiscali.fr>" <bosshog<replace> a écrit dans le message de
news:
Salut,
d'aprés ce que je crois savoir(je n'utilise pas les trigger) lors d'un
update, les ancienes valeurs sont stockées dans une table temporaire


porpre
au trigger(inserted et deleted) ce qui fait que meme en utilisant le mode
AFTER tu doit pouvoir revenir à l'ancienne valeur.
@+ Boss Hog


"Yan" wrote in message
news:418f4020$0$18897$
> Bonjour,
>
> Dans mon appli, une donnée peut être modifiée à de multiple endroits.
> Au moment de la modif, je souhaite contrôler si l'utilisateur en a le
droit.
> Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur
la
> table en question.
>
> Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas


le
> droit.
>
> Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la


table
> updated), je ne pourrais inverser l'opération puisque j'aurais perdu
> l'ancienne valeur.
> Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
> récupérer la requête SQL ayant provoqué le trigger ? Parce que si
> l'utilisateur a le droit, il faut quand même que j'exécute sa requête.
>
> Je sais pas si c'est bien clair.
>
> Merci d'avance
>
>




Avatar
Yan
Non pardon, la table updated n'existe pas :) !


"Yan" a écrit dans le message de
news:418f4436$0$15919$
Je rectifie pour AFTER, la table updated conserve les anciennes valeurs

Par contre, si vous avez des réponses concernant INSTEAD OF, ça


m'intéresse
quand même

Merci


"Yan" a écrit dans le message de
news:418f4020$0$18897$
> Bonjour,
>
> Dans mon appli, une donnée peut être modifiée à de multiple endroits.
> Au moment de la modif, je souhaite contrôler si l'utilisateur en a le
droit.
> Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur
la
> table en question.
>
> Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas


le
> droit.
>
> Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la


table
> updated), je ne pourrais inverser l'opération puisque j'aurais perdu
> l'ancienne valeur.
> Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
> récupérer la requête SQL ayant provoqué le trigger ? Parce que si
> l'utilisateur a le droit, il faut quand même que j'exécute sa requête.
>
> Je sais pas si c'est bien clair.
>
> Merci d'avance
>
>




Avatar
Yanos El Guerilleros
Salut,

Si tu lèves une erreur (de niveau 16 minimum il me semble) avec un ROLLBACK
TRANSACTION, toutes tes modifs sont annulées, même dans un AFTER ainsi tu
peux créer tes propres règles et empêcher toutes violations de ces règles.

Il y a un exemple dans le BOL dans la section "CREATE TRIGGER".

A++

Yanos

"Yan" a écrit dans le message de
news:418f4020$0$18897$
Bonjour,

Dans mon appli, une donnée peut être modifiée à de multiple endroits.
Au moment de la modif, je souhaite contrôler si l'utilisateur en a le


droit.
Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur


la
table en question.

Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas le
droit.

Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la table
updated), je ne pourrais inverser l'opération puisque j'aurais perdu
l'ancienne valeur.
Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
récupérer la requête SQL ayant provoqué le trigger ? Parce que si
l'utilisateur a le droit, il faut quand même que j'exécute sa requête.

Je sais pas si c'est bien clair.

Merci d'avance




Avatar
Yanos El Guerilleros
sinon pour la table "updated" elle n'existe pas car on utilise :
- "inserted" : pour connaître les nouvelles valeurs
- "delete" : pour connaître les anciennes valeurs

l'interêt d'une table updated est plutôt limitée dans ce contexte :)

A++

Yanos

"Yanos El Guerilleros" a écrit dans le message
de news:
Salut,

Si tu lèves une erreur (de niveau 16 minimum il me semble) avec un


ROLLBACK
TRANSACTION, toutes tes modifs sont annulées, même dans un AFTER ainsi tu
peux créer tes propres règles et empêcher toutes violations de ces règles.

Il y a un exemple dans le BOL dans la section "CREATE TRIGGER".

A++

Yanos

"Yan" a écrit dans le message de
news:418f4020$0$18897$
> Bonjour,
>
> Dans mon appli, une donnée peut être modifiée à de multiple endroits.
> Au moment de la modif, je souhaite contrôler si l'utilisateur en a le
droit.
> Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur
la
> table en question.
>
> Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas


le
> droit.
>
> Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la


table
> updated), je ne pourrais inverser l'opération puisque j'aurais perdu
> l'ancienne valeur.
> Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
> récupérer la requête SQL ayant provoqué le trigger ? Parce que si
> l'utilisateur a le droit, il faut quand même que j'exécute sa requête.
>
> Je sais pas si c'est bien clair.
>
> Merci d'avance
>
>




Avatar
Yan
Merci

Pour le "updated", j'ai même pas réfléchi :)




"Yanos El Guerilleros" a écrit dans le message
de news:
Salut,

Si tu lèves une erreur (de niveau 16 minimum il me semble) avec un


ROLLBACK
TRANSACTION, toutes tes modifs sont annulées, même dans un AFTER ainsi tu
peux créer tes propres règles et empêcher toutes violations de ces règles.

Il y a un exemple dans le BOL dans la section "CREATE TRIGGER".

A++

Yanos

"Yan" a écrit dans le message de
news:418f4020$0$18897$
> Bonjour,
>
> Dans mon appli, une donnée peut être modifiée à de multiple endroits.
> Au moment de la modif, je souhaite contrôler si l'utilisateur en a le
droit.
> Donc au lieu de passer partout, j'ai pensé à faire plutôt un trigger sur
la
> table en question.
>
> Le but étant d'annuler les update ou delete si l'utilisateur n'en a pas


le
> droit.
>
> Si j'utilise le paramètre AFTER, le update étant déjà fait (dans la


table
> updated), je ne pourrais inverser l'opération puisque j'aurais perdu
> l'ancienne valeur.
> Je pense donc utiliser INSTEAD OF pour filtrer. Mais là, comment peut-on
> récupérer la requête SQL ayant provoqué le trigger ? Parce que si
> l'utilisateur a le droit, il faut quand même que j'exécute sa requête.
>
> Je sais pas si c'est bien clair.
>
> Merci d'avance
>
>