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

Oracle Discussion :

Trigger sur logon en 9i et 10G


Sujet :

Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Trigger sur logon en 9i et 10G
    bonjour,

    mon trigger on logon ne fonctionne plus en 9i et 10G. J'utilise le trigger on logon pour interdire les connexions sqlplus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    CREATE OR REPLACE TRIGGER block_login
    AFTER LOGON ON DATABASE
    DECLARE
     
     
     
    	v_osuserid	v$session.osuser%TYPE;
    	v_machinename	v$session.machine%TYPE;
    	v_sid		v$session.sid%TYPE;
    	v_serial	v$session.serial#%TYPE;
    	v_program	v$session.program%TYPE;
     
    	CURSOR c1 IS
    		SELECT sid, serial#, osuser, machine
    		FROM v$session 
    		WHERE audsid=sys_context('USERENV','SESSIONID')
    		AND upper(username) in ('XXX')
    		AND machine like 'XXX%'; -- Posibilité de mettre un filtre sur les user à auditer
     
    BEGIN
     
    	OPEN c1;
     
    	LOOP	
     
    		FETCH c1 INTO v_sid, v_serial, v_osuserid, v_machinename;
     
    		EXIT WHEN c1%NOTFOUND;
     
    		raise_application_error(-20001,'IL EST INTERDIT DE SE CONNECTER VIA SQLPLUS A LA BASE PENDANT LE TP');
     
     
    	END LOOP;
     
    	CLOSE c1;		
     
     
    END;
    /
    mais le raise_application_error ne fonctionne plus.
    Dernière modification par orafrance ; 21/03/2008 à 14h59.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le RAISE ne fonctionne pas ou le LOOP ne fonctionne pas (pas de ligne ramenée par la requête) ?

    PS : merci d'utiliser les balises CODE

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Create or replace trigger logontrig
    after logon on database
    Begin
    if ora_login_user='OPS$EKIPCGI'
    THEN
    RAISE_APPLICATION_ERROR(-20001, 'You are not authorized to login into this machine shy');
    END IF;
    end;
    /
    cela ne fonctionne pas non plus
    Dernière modification par orafrance ; 21/03/2008 à 15h25.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    la condition n'est pas vérifiée visiblement. On va quand même pas débugger pour toi

  5. #5
    Invité
    Invité(e)
    Par défaut
    bien sur que la condition est respecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
    if sys_context('USERENV','SESSION_USER') = 'OPS$EKIPCGI'
    then
    raise_application_error( -20001, 'connection refused' );
    end if;
    end;
    /
    le raise fonctionne bien !!!.

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER logontrig
    after logon ON DATABASE
    Begin
    dbms_output.put_line(ora_login_user);
    end;
    /
    Edit : tu utilises un user externe et dans ce cas ora_login_user n'est peut-être pas renseigné

  7. #7
    Invité
    Invité(e)
    Par défaut
    réponds : OPS$EKIPCGI

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE TRIGGER logontrig
    after logon ON DATABASE
    Begin
    IF ora_login_user='OPS$EKIPCGI'
    THEN
    RAISE_APPLICATION_ERROR(-20001, 'You are not authorized to login into this machine shy');
    ELSE
    dbms_output.put_line(LENGTH(ora_login_user) || '-' || ora_login_user);
    END IF;
    end;
    /

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    CREATE OR REPLACE TRIGGER logontrig
    after logon ON DATABASE
    Begin
     
    dbms_output.enable(1000);
     
    IF ora_login_user='OPS$EKIPCGI'
    THEN
    dbms_output.put_line('AVANT RAISE');
    dbms_output.put_line(LENGTH(ora_login_user) || '-' || ora_login_user);
    RAISE_APPLICATION_ERROR(-20001, 'You are not authorized to login into this machine shy');
     
    dbms_output.put_line('APRES RAISE');
    dbms_output.put_line(LENGTH(ora_login_user) || '-' || ora_login_user);
     
    ELSE
     
    dbms_output.put_line('OK');
    dbms_output.put_line(LENGTH(ora_login_user) || '-' || ora_login_user);
    END IF;
    end;
    /
    reponds :

    Connecté.
    AVANT RAISE
    11-OPS$EKIPCGI
    Ecoulé : 00 :00 :00.00
    pas d'après RAISE ?? et la session est toujours valide

  10. #10
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut


    et t'as pas de gestion d'exception ? T'aurais pas un autre trigger de logon par hasard ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    meme en ajoutant une gestion d'exception le raise n'a pas d'effet. Non pas d'autre trigger on logon

  12. #12
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ha mais c'est after logon... donc la connexion est déjà faite... t'as essayé BEFORE LOGON ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    before logon ON DATABASE
    *
    ERREUR à la ligne 2 :
    ORA-30508: les déclencheurs de connexion de client ne peuvent pas être de type
    BEFORE

  14. #14
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    oops

  15. #15
    Invité
    Invité(e)
    Par défaut
    merci pour ton aide.

    Pour ton information le meme trigger sur une base 8i fonctionne correctement. J'ai ouvert un tar chez oracle. Je te tiens informé

  16. #16
    Invité
    Invité(e)
    Par défaut
    Au fait. Mon problème de départ, est que je dois bloquer les connexions sqlplus faites à partir des postes clients pendant notre phase TP.

    Si tu as une autre idée

  17. #17
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  18. #18
    Invité
    Invité(e)
    Par défaut
    effectivement. La solution du product_user_profile n'est pas assez fine.

  19. #19
    Invité
    Invité(e)
    Par défaut
    miracle j'ai testé sur une base que l'on migre en 10G et cela marche à nouveau.

  20. #20
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    de toute façon tu as le contournement : sys_context('USERENV','SESSION_USER')

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. trigger sur deux tables
    Par Shabata dans le forum Développement
    Réponses: 4
    Dernier message: 04/05/2004, 16h55
  2. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 10h02
  3. Trigger sur une colonne ?
    Par hpalpha dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 14h16
  4. Trigger sur select
    Par bilo2000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2004, 13h39
  5. Pb Trigger sur vue
    Par cosminutza dans le forum Développement
    Réponses: 3
    Dernier message: 28/07/2003, 16h37

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