Oracle/Administration2012. 5. 1. 17:35

DDL 트리거를 사용하면 간단한 감사 기능을 구현할 수 있다.


테스트를 위해 아래와 같이 테이블을 생성하자.

-- 1 : TUNA
CREATE TABLE t1 (
    ts         TIMESTAMP
  , login_user VARCHAR2(30)
  , sysevent   VARCHAR2(20)
  , obj_owner  VARCHAR2(30)
  , obj_type   VARCHAR2(20)
  , obj_name   VARCHAR2(30)
  , ip_address VARCHAR2(255)
  , os_user    VARCHAR2(255)
  , terminal   VARCHAR2(255)
  , host       VARCHAR2(255));

감사 기능을 수행할 DDL 트리거를 생성하자. IF 문에 예외 이벤트를 정의했다. 그 외의 이벤트는 테이블에 로그를 남긴 후 에러를 발생시킨다.

-- 2 : SYS
CREATE OR REPLACE TRIGGER trg1
    BEFORE DDL ON SCOTT.SCHEMA
DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    IF (        ora_sysevent = 'COMMENT'
        OR (    ora_sysevent = 'CREATE'
            AND ora_dict_obj_type IN ('FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'PROCEDURE'))
        OR (    ora_sysevent = 'TRUNCATE'
            AND ora_dict_obj_name IN ('')))
    THEN
        NULL;
    ELSE
        INSERT
          INTO tuna.t1
               (ts, login_user, sysevent, obj_owner, obj_type, obj_name, ip_address, os_user, terminal, host)
        VALUES (SYSTIMESTAMP
              , ORA_LOGIN_USER
              , ORA_SYSEVENT
              , ORA_DICT_OBJ_OWNER
              , ORA_DICT_OBJ_TYPE
              , ORA_DICT_OBJ_NAME
              , SYS_CONTEXT ('USERENV', 'IP_ADDRESS')
              , SYS_CONTEXT ('USERENV', 'OS_USER')
              , SYS_CONTEXT ('USERENV', 'TERMINAL')
              , SYS_CONTEXT ('USERENV', 'HOST')
               );

        COMMIT;

        RAISE_APPLICATION_ERROR (-20000, 'insufficient privileges');
    END IF;
END trg1;

SCOTT 유저로 로그인하여 CREATE TABLE 문을 실행해보자. trg1 트리거에 의해 에러가 발생한다.

-- 3 : SCOTT
CREATE TABLE t1 (c1 NUMBER);
ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다
ORA-20000: insufficient privileges

t1 테이블을 조회하면 로그를 확인할 수 있다.

-- 4 : TUNA
SELECT * FROM t1;

TS                  LOGIN SYSEVE OBJ_O OBJ_T OB IP_ADDRESS OS_USER TERMINAL   HOST
------------------- ----- ------ ----- ----- -- ---------- ------- ---------- --------------------
2012-05-01 17:26:26 SCOTT CREATE SCOTT TABLE T1 127.0.0.1  HRJEONG HRJEONG-PC WORKGROUP\HRJEONG-PC

1개의 행이 선택되었습니다.


'Oracle > Administration' 카테고리의 다른 글

CHECK 제약조건 적용 사례  (0) 2012.05.22
PK 제약조건과 인덱스 #1  (0) 2012.05.18
RANGE 파티션 통계정보 관리 패키지  (0) 2012.05.10
INVISIBLE 인덱스  (0) 2012.05.02
READ ONLY 테이블 테스트  (0) 2012.05.01
Posted by 정희락_