Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2008, 14h48   #1
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
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 :
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.
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h00   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h12   #3
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
Code :
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
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h27   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
la condition n'est pas vérifiée visiblement. On va quand même pas débugger pour toi
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h34   #5
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
bien sur que la condition est respecter :

Code :
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 !!!.
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h45   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
que donne :
Code :
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é
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h48   #7
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
réponds : OPS$EKIPCGI
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h50   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et ça :

Code :
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;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h57   #9
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
Code :
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 :

Citation:
Connecté.
AVANT RAISE
11-OPS$EKIPCGI
Ecoulé : 00 :00 :00.00
pas d'après RAISE ?? et la session est toujours valide
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h00   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212


et t'as pas de gestion d'exception ? T'aurais pas un autre trigger de logon par hasard ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h04   #11
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
meme en ajoutant une gestion d'exception le raise n'a pas d'effet. Non pas d'autre trigger on logon
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h05   #12
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ha mais c'est after logon... donc la connexion est déjà faite... t'as essayé BEFORE LOGON ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h07   #13
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
Citation:
before logon ON DATABASE
*
ERREUR à la ligne 2 :
ORA-30508: les déclencheurs de connexion de client ne peuvent pas être de type
BEFORE
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h08   #14
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
oops
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h09   #15
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
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é
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h12   #16
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
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
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h14   #17
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://oracle.developpez.com/faq/?pa...#toolnoconnect

mais c'est ce que tu as fait
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h16   #18
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
effectivement. La solution du product_user_profile n'est pas assez fine.
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h18   #19
Invité régulier
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 6
Points : 6
miracle j'ai testé sur une base que l'on migre en 10G et cela marche à nouveau.
vandeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h18   #20
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
de toute façon tu as le contournement : sys_context('USERENV','SESSION_USER')
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h45.


 
 
 
 
Partenaires

Hébergement Web