Oracle Logon Trigger
Hangi kullanıcı, hangi ipden, hangi makineden ne zaman bağlanmış vb. bilgileri loglamaktadır.
Öncelikle SYS ile login olup, logları tutacak bir tablo create edelim.
CREATE TABLE LOGON_HISTORY_TAB (
user_id VARCHAR2(30),
session_id NUMBER(8),
host VARCHAR2(30),
program VARCHAR2(48),
logon_time DATE,
terminal VARCHAR2(512),
sessionid VARCHAR2(512),
isdba VARCHAR2(512),
session_user VARCHAR2(512),
os_user VARCHAR2(512),
ip_address VARCHAR2(512),
network_protocol VARCHAR2(512),
authentication_type VARCHAR2(512) );
Şimdi de loginleri tutacak triggerımızı oluşturalım.(SYS ile)
CREATE OR REPLACE TRIGGER LOGON_HISTORY_TRG AFTER
LOGON ON DATABASE
DECLARE
SESS NUMBER(10);
PROG VARCHAR2(100);
BEGIN
SESS := SYS_CONTEXT('USERENV', 'SESSIONID');
SELECT PROGRAM
INTO PROG
FROM V$SESSION
WHERE AUDSID = SESS
AND ROWNUM <= 1;
INSERT INTO LOGON_HISTORY_TAB
( user_id,
session_id,
host,
program,
logon_time,
terminal,
sessionid,
isdba,
session_user,
os_user,
ip_address,
network_protocol,
authentication_type )
VALUES
(USER,
SYS_CONTEXT('USERENV', 'SESSIONID'),
SYS_CONTEXT('USERENV', 'HOST'),
PROG,
SYSDATE,
SYS_CONTEXT('USERENV', 'TERMINAL'),
SYS_CONTEXT('USERENV', 'SESSIONID'),
SYS_CONTEXT('USERENV', 'ISDBA'),
SYS_CONTEXT('USERENV', 'SESSION_USER'),
SYS_CONTEXT('USERENV', 'OS_USER'),
SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL'),
SYS_CONTEXT('USERENV', 'AUTHENTICATION_TYPE'));
EXCEPTION
WHEN OTHERS THEN
NULL;
END LOGON_HISTORY_TRG;
Triggerı create ettikten sonraki tüm loginleri loglayıp ilgili tablomuza yazacaktır.
Loglara bakmak için;
SELECT * FROM LOGON_HISTORY_TAB T;