Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 Audit 기능을 이용하여 Database 사용자를 확인하는 방법.
Audit 기능을 이용하여 Database 사용자를 확인하는 방법.
==================================================

1. init.ora 에 다음 파라미터를 셋팅한다.

audit_trail=none

기존에 true 등으로 셋팅되어 있다면 반드시 none 으로 변경한다.
none 이 아닌 TRUE, DB 등으로 셋팅되어 있으면 반드시 none 으로 변경 후
반드시 DB 재기동이 필요하다.
이 작업없이 2번 작업을 하고 나면 DB 에 접속 시 error 가 발생한다.
물론 다시 해당 오브젝트를 drop 하면 문제가 해결된다.

2. 필요한 오브젝트와 권한을 생성한다.

SVRMGR> connect internal
SVRMGR> create table system.aud$ as select * from aud$
SVRMGR> rename aud$ to aud$_temp
SVRMGR> connect system/manager
SVRMGR> create index i_aud1 on aud$ (sessionid, ses$tid)
SVRMGR> grant all on aud$ to sys with grant option
SVRMGR> connect internal
SVRMGR> create view aud$ as select * from system.aud$
SVRMGR> exit
$ cd $ORACLE_HOME/rdbms/admin
$ svrmgrl
SVRMGR> connect internal
SVRMGR> @cataudit.sql

sys 유저에 audit 정보를 저장할 테이블을 생성한다.
aud$ table 에 변경이 가해지면 Trigger 가 fire 되어 아래 테이블에
필요한 정보를 입력하게 된다.

SVRMGR>
create table accounting
(USERNAME VARCHAR2(30),
LOGIN_TIME DATE,
LOGOFF_TIME DATE,
SCHEMANAME VARCHAR2(30),
OSUSER VARCHAR2(15),
PROCESS VARCHAR2(9),
MACHINE VARCHAR2(64),
TERMINAL VARCHAR2(8),
PROGRAM VARCHAR2(64),
TYPE VARCHAR2(10),
LOGICAL_READ NUMBER,
PHYSICAL_READ NUMBER,
SID NUMBER,
SESSION_SID NUMBER,
CPU_TIME NUMBER)
/

Trigger 를 생성한다.

SVRMGR>

create table oper (act varchar2(27));

create or replace trigger acc_trigger
after update on system.aud$ for each row
when (new.action# = 101 or new.action# = 102)
begin
insert into accounting
select :new.userid,:new.timestamp#,:new.logoff$time,
ss.schemaname, ss.osuser, ss.process, ss.machine, ss.terminal,
ss.program, ss.type, :new.logoff$lread, :new.logoff$pread,
st.sid, ss.audsid, st.value
from V$STATNAME S, V$SESSTAT ST, V$SESSION SS
where S.STATISTIC# = ST.STATISTiC# AND ST.SID = SS.SID
and :new.sessionid = SS.AUDSID
and S.NAME='CPU used by this session';
insert into oper
select audit_actions.name
from audit_actions
where :new.action# = audit_actions.action;
end;
/



3. init.ora 파일에 다음과 같이 파라미터를 다시 변경후 DB 재기동 한다.
audit_trail=DB
timed_statistics=TRUE


4. Audit 기능을 설정한다.

예) audit session by hanseo
예) audit all on username.table명
예) audit table by scott by access whenever successful

그리고 다음 쿼리문을 실행한다.

SQL> select osuser,username,to_char(LOGIN_TIME,'dd.mm.yy:hh:mi') login,
to_char(LOGOFF_TIME,'dd.mm.yy:hh:mi') logout, MACHINE, CPU_TIME
from accounting;

SQL>

OSUSER USERNAME LOGIN LOGOUT MACHINE CPU_TIME
------ -------- ------------- -------------- --------- ----------
hanseo HANSEO 29.01.99:11:07 29.01.99:11:12 윤 한서 66
1 row selected.


OSUSER : windows login name
USERNAME : DB username
MACHINE : 제어판--네트워크--컴퓨터확인--컴퓨터이름 이다.
Comment
등록된 코멘트가 없습니다.