2017-04-03 2 views
1

Je veux enregistrer tout oracle instruction select exécuté sur oracle table spécifique et pc ip address, windows username, PC namecomment enregistrer tous oracle instruction select exécuté sur la table Oracle

-à-dire que je dois savoir qui et quand une table a été lu ..

J'ai cherché et trouvé la cette requête retournera pc ip address, windows username, PC name

SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), 
     SYS_CONTEXT ('USERENV', 'HOST'), 
     SYS_CONTEXT ('userenv', 'OS_USER') 
    FROM DUAL; 

Mais je me demande si cela va retourner une information correcte quand il n'y a pas de base de données sur ce PC?

puisque le trigger ne peut pas être lancé sur select then Comment traiter ce cas?

J'utilise Oracle Forms 6i application s'il est possible solution trop

Répondre

2

Vous pouvez utiliser l'audit de base de données pour les états individuels DML SQL/DDL.

Exemple:

SQL> conn sys as sysdba 
SQL> alter system set audit_trail=DB,EXTENDED scope=spfile; 

redémarrage de la base de données.

J'ai une table appelée T1 et je veux l'instruction SELECT les déclarations tirées contre elle. Les informations d'audit peuvent être obtenues à partir de USER_AUDIT_TRAIL.

SQL> select OS_USERNAME,USERNAME, USERHOST, SQL_TEXT, ACTION_NAME from dba_audit_trail where obj_name='T1'; 

OS_USERNAME  USERNAME USERHOST  SQL_TEXT   ACTION_NAME 
------------ --------- ------------ ----------------- ------------ 
oracle   JAY  myserver.js  select * from t1 SELECT 

Individually Auditing SQL Statements

+0

que ça fonctionnera avec Oracle9i mais il ne sera pas me montrer le sql_text est leur tout travail autour? – sam

+0

Vous pouvez projeter la colonne ACTION_NAME comme le suggère ma mise à jour, ce qui indique seulement que DML/DDL n'a pas été utilisé comme instruction complète. – JSapkota