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
setzalogowany_przez_min =
round((logoff_day - logon_day)*1440)
where
sys_context('USERENV','SESSIONID') = sesja;
END;
/