Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 AUDITING 이란 무엇인가?
AUDITING 이란 무엇인가?
=======================

1)개 요

AUDITING 기능은 사용자의 행동을 감시하거나 데이타베이스에 관한 통계자료를
얻는 목적으로 사용된다. AUDITING 기능을 사용함으로써 누가 어떤 테이블을 언제
사용하고, 언제 어떤 작업을 하는지를 기록할 수 있다. 하지만 레코드에 대한
AUDITING 은 불가능하며 AUDITING 을 걸게 되면 시스템에 부하를 줄 수도 있기
때문에 자주 사용되는 기능은 아니다. AUDITING 에서 제공되지 않는 기능은
사용자가 트리거를 만들어서 구현을 해야 한다.

2)종 류

AUDITING 에는 3가지 종류가 있다.

STATEMENT AUDITING : 명령의 종류에 따라서 AUDITING 설정

EX)AUDIT TABLE BY SCOTT BY ACCESS WHENEVER SUCCESSFUL;
scott 유저가 내리는 명령 중 테이블에 관련된 명령
(create table, drop table 등)이 성공한 경우 기록된다.

PRIVILEGE AUDITING : 사용되는 PRIVILEGE 에 따른 AUDITING 설정

EX)AUDIT CREATE TABLE BY SCOTT BY SESSION;
scott 유저가 CREATE TABLE 권한이 필요한 명령(CREATE TABLE)을 내린 경우
접속된 세션에 대해서 한번만 기록된다.

OBJECT AUDITING : 적용되는 OBJECT 에 따른 AUDITING 설정

EX)AUDIT ALL ON SCOTT.EMP;
scott.emp 테이블에 대한 모든 명령(SELECT, DELETE, DROP 등)에 관한
사항이 기록된다.

설정된 AUDIT 기능은 NOAUDIT 명령으로 없앨 수 있다.
EX)NOAUDIT ALL ON SCOTT.EMP;


3)설 정

AUDIT 기능은 init.ora 화일에 AUDIT_TRAIL 파라미터를 설정하고 DB를
shutdown/startup 하면 작동한다.

AUDIT_TRAIL=DB 로 설정이 되어 있으면 결과는
SYS.AUD$ 테이블에 쌓이게 되고 AUDIT_TRAIL=OS 로 설정하면 결과가 화일로
생기게 된다.

SYS.AUD$ 테이블에서 얻을 수 있는 정보는 매우 많은데 대표적인 것으로 다음을
들 수 있다.

USER NAME : 오라클 유저 이름
SESSION ID : 오라클 세션 ID
TERMINAL ID : 유닉스 시스템 상의 터미날 ID
OBJECT NAME : 테이블, 뷰 등의 이름
ACTION ID : 명령 코드
DATE : 명령이 실행된 날짜,시간
COMPLETION CODE : 0 이면 성공, 실패하면 에러 코드

ACTION ID 는 사용된 명령을 나타내는데 이것은 숫자로 기록이 되어 있으므로
AUDIT_ACTIONS 딕셔너리를 통하여 실제의 명령으로 변환해 볼 수 있다.

4)특 징

*내려진 명령이 ROLLBACK 되더라도 AUDIT 에 의해 기록된 정보는 그대로 남아 있다.
*SYS 또는 INTERNAL로 접속하여 행하는 명령은 AUDIT에 의해서 기록되지 않는다.
*오라클은 AUDIT 기능의 세팅 여부와는 관계없이 STARTUP, SHUTDOWN,
CONNECT INTERNAL 과 같은 정보는 OS 상의 화일로 기록을 남겨준다.
*REMOTE DB 에 대해서 행해지는 작업은 AUDIT 대상이 되지 않는다. 이것은
REMOTE DB 에서 처리해 주어야 한다.
*만약 두개의 AUDIT 가 동시에 적용되는 경우라면 하나의 레코드만 생성된다.
예를 들어 TABLE 과 CREATE TABLE 이 적용되는 경우이다.
*OBJECT AUDITING 은 모든 유저에 대해서 적용된다. 특정한 유저를 지정하지
못한다.
*BY SESSION 은 접속된 세션에 대해서 하나의 레코드만 생성하고 BY ACCESS
는 해당 명령이 내려질 때마다 정보를 기록한다.
*DDL을 AUDIT 하는 SYSTEM AUDIT, PRIVILEGE AUDIT의 경우는 BY ACCESS가 디폴트
이고 그 외의 경우는 BY SESSION 이 디폴트이다.

예)
audit execute on username.procedure_name;

하면 procedure 의 수행여부가 기록됩니다.


7.3 이상 version 에서는 column name 이 다음과 같습니다.

USERID : 오라클 유저 이름
SESSIONID : 오라클 세션 ID
TERMINAL : 유닉스 시스템 상의 터미날 ID
OBJ$NAME : 테이블, 뷰 등의 이름
ACTION : 명령 코드
TIMESTAMP : 명령이 실행된 날짜,시간

따라서, 현재 어떤 작업에 audit 가 걸려 있는지 확인하는 SQL 은 다음과
같습니다.

select a.userid, b.name
from sys.aud$ a, audit_actions b
where a.action = b.action;

8.0 이상에서는 action 컬럼이 action#으로 변경되었습니다.

select a.userid, b.name
from sys.aud$ a, audit_actions b
where a.action# = b.action;
Comment
등록된 코멘트가 없습니다.