Bonjour,
je souhaiterai savoir s'il existe un moyen de connaître le user qui modifie ou a compilé des objets sur la base tel que procédures, package, trigger ou vue.
Merci
Bonjour,
je souhaiterai savoir s'il existe un moyen de connaître le user qui modifie ou a compilé des objets sur la base tel que procédures, package, trigger ou vue.
Merci
Bonjour,
Il n'existe aucun moyen.
Au plus, tu peux savoir quand il a été recompilé pour la dernière fois.
sinon, c'est à toi de le gérer au niveau des droits.
tu dois savoir qui peux se connecter et changer les packages.
Il y a peut-être 2 possibilités à creuser:
- en configurant l'audit pour savoir quel est le compte OS qui a lancé la commande SQL correspondante (mais si l'audit n'avait pas été configuré à l'instant voulu, c'est exclu ...) ?
- en analysant les redo logs avec LogMiner (uniquement si la base est en archive log) ? A condition de pouvoir faire le lien entre les commandes SQL DML qui mettent à jour le dictionnaire et la commande SQL CREATE XXX ...
Il y a plusieurs "solutions" à ton problème :
1. comme le dit aline, tu as la solution de contrôler les privilèges,
2. comme le dit pifor, les logminers peuvent être un moyen efficace pour tracer ce genre de chose. ( la colonne sql_redo de v$logmnr_contents trace pas mal de chose mais tout dépend aussi de ta version d'oracle),
3. Une autre solution à ton problème peut être la création d'un trigger dit DDL :
il va permettre de quasiment tout tracer (package, trigger, sequence, vue, fonction, procedure, table etc ...),
!!!!!!!!! ATTENTION !!!!!!!
je te met quand même en garde ==> si ton trigger DDL est invalide pour une raison X, l'ensemble des commandes DDL que l'on cherchera à executer échoueront ...
je te met le code ci-dessous, et je te conseille de bien tester tous les cas sur une base de dev ..
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
40
41
42
43
44
45
46
47
48
49 connect system/XXX@base drop table system.ddl_log; create table system.ddl_log ( user_name varchar2(30), ddl_date date, ddl_type varchar2(30), object_type varchar2(18), owner varchar2(30), object_name varchar2(128), terminal varchar2(30), audsid number ) tablespace XXXXX; create or replace trigger DDLTrigger AFTER DDL ON DATABASE BEGIN insert into system.ddl_log ( user_name, ddl_date, ddl_type, object_type, owner, object_name, terminal, audsid ) VALUES ( ora_login_user, sysdate, ora_sysevent, ora_dict_obj_type, ora_dict_obj_owner, ora_dict_obj_name, sys_context('USERENV','TERMINAL'), sys_context('USERENV','SESSIONID') ); END; /
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager