[Oracle] 사용자 Login/Logout 기록하는 트리거 만들기
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' 카테고리의 다른 글
[Oracle] Audit Trail 설정 및 관리 - 감사로그 테이블 위치 변경 (0) | 2019.08.22 |
---|---|
[Oracle] undo tablespace segment 확인 방법 (0) | 2019.06.20 |
[Oracle] UNDO Tablespace 비우는 방법 (0) | 2018.12.10 |
테이블스페이스 관리 (0) | 2012.06.18 |
Data Export/Import (0) | 2012.06.18 |