salut

j'essaie de faire un trigger pour virer des users utilisant certains programmes
je n'ai pas pensé que cela tournera à la galère

cela concerne 11.2.0.3 mais 10 aussi (j'ai lu que 9i n'est pas concernée mais je n'ai pas testé)

plusieurs problèmes se posent

1. RAISE_APPLICATION_ERROR ne termine pas la session. Elle est toujours visible dans v$session. certains disent que c'est un focntionnement normal pour ne pas empêcher des users avec privilèges DBA de continuer sinon vous imaginez si le trigger foire pour tous le monde ? oui OK mais oracle peut bien tester avec de finir la session !!
certains disent que c'est un bug à rapporter au support

2. RAISE_APPLICATION_ERROR affiche 3 erreurs

ORA-00604: error occurred at recursive SQL level 1
ORA-20001: You are not allowed blabla
ORA-06512: at line 32

pas moyen d'afficher un message propre ? ORA-20001 seule ?

3. si on tente un kill session après RAISE_APPLICATION_ERROR alors faudra un grant select on sys.v_$session to public ce que je n'aime pas faire (la cellule sécurité /audit me tombera dessus)

J'ai aussi remarqué que SYS_CONTEXT('USERENV','SESSIONID') n'est pas unique et l'id est partagé par tous les users avec certains privilèges. Donc contrairement à ce qui se dit, çe ne permet pas d'identifier une unique session

4. et si on essaie dbms_output.put_line ensuite kill session ? là problème ça ne marche pas à partir d'un trigger

quelqu'un aurait des astuces pour faire marcher ce trigger proprement ?