Oracle Logon Trigger

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;

Tagged: , , , ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir