[Oracle] 상세 감사(audit) 활성화

·2025년 9월 5일

오라클 관리

목록 보기
102/163

실습1. 상세 감사 기능을 활성화 시키시오

-- sys 유져에서 scott 의 emp 테이블에서 월급이 3000 이상인 사원들의 data 를 조회하는 
--    SQL을 누군가 수행하면 무조건 감사되게 설정합니다.

begin
    dbms_fga.add_policy(object_schema=>'SCOTT',
                       object_name=>'EMP',
                       policy_name=>'POL7',
                       audit_condition=>'SAL >= 3000',
                       enable=>TRUE,
                       statement_types=>'INSERT,SELECT,UPDATE',
  audit_trail=>DBMS_FGA.DB_EXTENDED);
END;
/

그리고 scott 유져에서 다음과 같이 조회합니다.

select ename, sal
  from emp
  where sal = 5000;

sys 유져에서 상세 감사 로그를 확인합니다.

select to_char(TIMESTAMP,'yyyy/mm/dd HH24:MI:SS')  timeinfo ,
        userhost, os_user, OBJECT_NAME,SCN, SQL_TEXT,SQL_BIND
  from dba_fga_audit_trail;


문제1. scott 유져에서 allen 의 월급을 6000으로 변경하고 감사되는지 확인하시오

-- scott 유저에서
update emp
set sal=6000
where ename='ALLEN';


-- sys 유저에서
select to_char(TIMESTAMP,'yyyy/mm/dd HH24:MI:SS')  timeinfo ,
        userhost, os_user, OBJECT_NAME,SCN, SQL_TEXT,SQL_BIND
  from dba_fga_audit_trail;

문제2. salgrade 테이블이 없으면 생성해주세요.

drop  table  salgrade;
 
create table salgrade
( grade   number(10),
  losal   number(10),
  hisal   number(10) );
 
insert into salgrade  values(1,700,1200);
insert into salgrade  values(2,1201,1400);
insert into salgrade  values(3,1401,2000);
insert into salgrade  values(4,2001,3000);
insert into salgrade  values(5,3001,9999);
 
commit;

문제3. sys 유져에서 상세 감사를 설정하는데 salgrade 테이블의 losal을 4000 보다 큰 값으로 insert 하거나 update 를 하면 감사가 되게 설정하고 테스트하시오

sys 유져에서 다음과 같이 설정

begin
    dbms_fga.add_policy(object_schema=>'SCOTT',
                       object_name=>'SALGRADE',
                       policy_name=>'POL8',
                       audit_condition=>'losal >= 4000',
                       enable=>TRUE,
                       statement_types=>'INSERT,UPDATE',
  audit_trail=>DBMS_FGA.DB_EXTENDED);
END;
/

scott에서 다음과 같이 수행

update salgrade
 set losal = 6000
 where grade= 5;

sys 유져에서 확인

select to_char(TIMESTAMP,'yyyy/mm/dd HH24:MI:SS')  timeinfo ,
        userhost, os_user, OBJECT_NAME,SCN, SQL_TEXT,SQL_BIND
  from dba_fga_audit_trail;

실습2. 지금 방금 생성한 상세 감사 정책을 drop 하시오

BEGIN
  DBMS_FGA.DROP_POLICY(
    object_schema   => 'SCOTT',
    object_name     => 'SALGRADE',
    policy_name     => 'POL8'
  );
END;
/

문제4. 기존에 만들었던 POL7 도 DROP 하시오

BEGIN
  DBMS_FGA.DROP_POLICY(
    object_schema   => 'SCOTT',
    object_name     => 'EMP',
    policy_name     => 'POL7'
  );
END;
/


-- 잘 drop 되었는지 확인
select *
 from dba_audit_policies;

문제5. hr 계정의 employees의 salary 를 50000 이상으로 update 했을 때 상세 감사가 되게하시오

alter user hr identified by hr;

-- sys 계정에서
begin
    dbms_fga.add_policy(object_schema=>'HR',
                       object_name=>'EMPLOYEES',
                       policy_name=>'POL9',
                       audit_condition=>'salary >= 50000',
                       enable=>TRUE,
                       statement_types=>'UPDATE',
  audit_trail=>DBMS_FGA.DB_EXTENDED);
END;
/


-- hr 계정에서
update employees
 set salary = 60000
 where first_name='Donald';


-- sys 계정에서
select to_char(TIMESTAMP,'yyyy/mm/dd HH24:MI:SS')  timeinfo ,
        userhost, os_user, OBJECT_NAME,SCN, SQL_TEXT,SQL_BIND
  from dba_fga_audit_trail;

0개의 댓글