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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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é

+ Répondre à la discussion
Cette discussion est résolue.

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