[Oracle] 사용자 Login/Logout 기록하는 트리거 만들기

2018. 12. 13. 20:01


1. 테이블스페이스 생성

- 새로 만들거나 기존 테이블스페이스 사용

- LOG_TEMP



2. 테이블 생성

- 로그인 시간과 유저명, ip, audsid을 저장

- sid 정보를 가져올 수 없어 audsid를 저장한다.  audsid도 유니크한 값이라서 괜찮음


CREATE TABLE LOGSTAT(

LOGIN DATE,

USERNAME VARCHAR2(30),

IP VARCHAR2(30),

AUDSID NUMBER,

LOGOUT DATE)

TABLESPACE LOG_TEMP;



3. Login 트리거

- 로그인 시간, 유저명, ip를 저장하는 트리거. SYS유저의 정보는 저장하지 않는다.

- 특정 유저만 필요한 경우 IF 구문을 수정

 

CREATE OR REPLACE TRIGGER LOGONIP AFTER LOGON ON DATABASE

BEGIN

IF SYS_CONTEXT('USERENV','SESSION_USER') NOT IN ('SYS') THEN

INSERT INTO SYS.LOGSTAT(LOGIN, USERNAME, IP, AUDSID)

VALUES(SYSDATE,(SYS_CONTEXT('USERENV','SESSION_USER')),(SYS_CONTEXT('USERENV','IP_ADDRESS')),(SYS_CONTEXT('USERENV','SESSIONID')));

COMMIT;

END IF;

END;

/



4. Logout 트리거

- 로그아웃 시간을 update하는 트리거


CREATE OR REPLACE TRIGGER LOGOFFIP BEFORE LOGOFF ON DATABASE

BEGIN

IF SYS_CONTEXT('USERENV','SESSION_USER') NOT IN ('SYS') THEN

UPDATE SYS.LOGSTAT SET LOGOUT=SYSDATE

WHERE AUDSID=(SYS_CONTEXT('USERENV','SESSIONID'));

COMMIT;

END IF;

END;

/



(참고) 트리거 활성/비활성 방법


alter trigger 트리거명 enable/disable;


밥짓는아이 테크노트/DBMS