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
Version imprimable
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:
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; /