środa, 16 kwietnia 2014

Audit schema HR


Skrypty wykonujemy na użytkowniku sys
Po uworzeniu triggera audit na bazie dane z logowania będą zapisywane do tablicy

Polska Wersja skryptu 
Wersja oryginalna znajduje się na stronie

CREATE TABLE stats$rejestracja (
  uzytkownik           VARCHAR2(200)  NULL,
  sesja                NUMBER(8,0)    NULL,
  host                 VARCHAR2(3000) NULL,
  ostatni_program      VARCHAR2(3000) NULL,
  ostatnia_akcja       VARCHAR2(3000) NULL,
  ostatni_modul        VARCHAR2(3000) NULL,
  dzien_zalogowania    DATE           NULL,
  czas_zalogowania     VARCHAR2(3000) NULL,
  dzien_wylogowania    DATE           NULL,
  czas_wylogowania     VARCHAR2(3000) NULL,
  zalogowany_przez_min NUMBER(38,0)   NULL
)
  STORAGE (
    NEXT       1024 K
  )
/


PROMPT CREATE OR REPLACE TRIGGER logon_audit_trigger
CREATE OR REPLACE TRIGGER logon_audit_trigger
AFTER LOGON ON DATABASE
BEGIN
insert into stats$rejestracja values(
   user,
   sys_context('USERENV','SESSIONID'),
   sys_context('USERENV','HOST'),
   null,
   null,
   null,
   sysdate,
   to_char(sysdate, 'hh24:mi:ss'),
   null,
   null,
   null
);
END;
/

PROMPT CREATE OR REPLACE TRIGGER logoff_audit_trigger
CREATE OR REPLACE TRIGGER logoff_audit_trigger
BEFORE LOGOFF ON DATABASE
BEGIN
-- ***************************************************
-- Update the last action accessed
-- ***************************************************
update
stats$rejestracja
set
ostatnia_akcja = (select action from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
--***************************************************
-- Update the last program accessed
-- ***************************************************
update
stats$rejestracja
set
ostatni_program = (select program from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the last module accessed
-- ***************************************************
update
stats$rejestracja
set
ostatni_modul = (select module from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the logoff day
-- ***************************************************
update
   stats$rejestracja
set
   dzien_zalogowania = sysdate
where
   sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the logoff time
-- ***************************************************
update
   stats$rejestracja
set
   czas_wylogowania = to_char(sysdate, 'hh24:mi:ss')
where
   sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Compute the elapsed minutes
-- ***************************************************
update
stats$rejestracja
 set
zalogowany_przez_min =   
round((logoff_day - logon_day)*1440)
where
sys_context('USERENV','SESSIONID') = sesja;
END;
/