본문 바로가기

카테고리 없음

ORACLE 10g DBMS_FGA v1.0

ORACLE 10g DBMS_FGA

 

 

1.    DBMS_FGA

FGA FINE GRAINED AUDIT 의 약자이다. 직역하면 상세감사이다. 제공되는 SUB PROGRAMS 은 아래와 같다.

 

ADD_POLICY                       --정책을 추가

DISABLE_POLICY                 --정책을 비활성화

DROP_POLICY                     --정책을 제거

ENABLE_POLICY                  --정책을 활성화

 

ADD_POLICY 를 제외한 나머지 3개의 프로시저의 입력값은 동일하다. (엄밀히 말하면 ENABLE_POLICY 가 입력값을 하나 더 갖는다.)

 

2.    SUB PROGRAM

<ADD_POLICY>

DBMS_FGA.ADD_POLICY(

   object_schema      VARCHAR2,

   object_name        VARCHAR2,

   policy_name        VARCHAR2,

   audit_condition    VARCHAR2,

   audit_column       VARCHAR2,

   handler_schema     VARCHAR2,

   handler_module     VARCHAR2,

   enable             BOOLEAN,

   statement_types    VARCHAR2,

   audit_trail        BINARY_INTEGER IN DEFAULT,

   audit_column_opts  BINARY_INTEGER IN DEFAULT);

 

OBJECT_SCHEMA 생략시 프로그램 호출한 SCHEMA DEFAULT 입력

 

OBJECT_NAME POLICY_NAME 은 필수 입력사항

 

AUDIT_CONDITION 생략가능, 생략시 AUDIT_COLUMN 조건으로 AUDITING

 

AUDIT_COLUMN 생략가능, 생략시 모든 컬럼에 대해 AUDITING

 

HANDLER_SCHEMA, HANDLER_MODULE 은 세트로 입력되는 값이다.

AUDITING 된 정보를 PROCEDURE FUNCTION 을 통해 다른 테이블에 입력가능하다.

HANDLER_SCHEMA 는 이 정보를 핸들링 할 PROCEDURE FUNCTION 을 소유한 SCHEMA 가 입력되며 HANDLER_MODULE 은 그 이름이 들어간다.

 

ENABLE 은 해당 POLICY 를 생성과 동시에 적용할지를 정한다. 기본값은 TRUE

 

STATEMENT_TYPES SELECT / INSERT, UPDATE, DELETE 가 들어갈 수 있다. SELECT DML 의 경우 같이 사용될 수 없으며 DML 은 다중선택이 가능하다.

 

AUDIT_TRAIL DB AUDIT_TRAIL 과 같은 역할을 한다. 이곳에서 AUDITING 한 결과를 어떻게 처리할지 결정된다. DEFAULT DB 를 사용한다. AUDITED DATA sys.fga_log$ 에서 조회할 수 있다.

들어올 수 있는 파라미터는 아래와 같다.

DBMS_FGA.DB

DBMS_FGA.DB + DBMS_FGA.EXTENDED

DBMS_FGA.XML

DBMS_FGA.XML + DBMS_FGA.EXTENDED

각 입력값에 대해 순번으로 설명하면 아래와 같다.

첫번째는 DB AUDITING 된 결과를 저장한다.

두번째는 위를 포함하면서 SQL_TEXT, SQL_BIND 값을 추가저장한다.

세번째는 FILE SYSTEM AUDITING 된 결과를 XML 로 저장한다.

네번째는 위를 포함하면서 SQL_TEXT, SQL_BIND 값을 추가저장한다.

 

AUDIT_COLUMN_OPTS 입력값으로 들어올 수 있는 것은 다음과 같다.

 

<DISABLE_POLICY>

DBMS_FGA.DISABLE_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 );

 

OBJECT_SCHEMA 생략시 프로그램 호출한 SCHEMA DEFAULT 입력

 

<DROP_POLICY>

DBMS_FGA.DROP_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 );

 

OBJECT_SCHEMA 생략시 프로그램 호출한 SCHEMA DEFAULT 입력

 

<ENABLE_POLICY>

DBMS_FGA.ENABLE_POLICY(
   object_schema  VARCHAR2,
   object_name    VARCHAR2,
   policy_name    VARCHAR2,
   enable         BOOLEAN);
 

OBJECT_SCHEMA 생략시 프로그램 호출한 SCHEMA DEFAULT 입력

 

 

3.    DBMS_FGA 특징과 제약

특정 TABLE, VIEW OBJECT 에 최대 256 개의 POLICY 를 걸수 있다.

 

OUT-OF-LINE COLUMNS ( ex: LOB ) 에 사용할 수 없음

 

AUDIT CONDITION 에는 BOOLEAN EXPRESSION 이 들어가야 하며 포함하지 못하는 것은 다음과 같다.

I.       SUB QUERIES, SEQUENCES

II.      직접적인 SYSDATE, UID, USER or USERENV 호출

III.     PSEUDO COLUMNS (ROWNUM, LEVEL 등등)

 

AUDIT CONDITION 1=1 로 주는 것은 모든 대상에 대해 AUDIT 를 의미하며 결과가 NULL 이어도 AUDITING 된다.

 

4.    DBMS_FGA 예제

편의 문제로 hr dba role grant 후 진행하겠다. 모든 작업은 hr에서 진행하였다.

실습과정에 사용한 스크립트는 다음과 같다.

**fgalog.sql**

select sessionid,timestamp#,sqltext

from sys.fga_log$

/

 

**policy.sql**

select object_schema,object_name,policy_name

from dba_audit_policies

/

 

<조건생략>

 

begin

        dbms_fga.add_policy(

                object_name=>'EMPLOYEES',

                policy_name=>'P1');

end;

/

 

SQL> update employees set salary = 200

  2  where employee_id = 100;

 

1 row updated.

 

SQL> commit;

 

Commit complete.

 

SQL> @fgalog

 

no rows selected

 

update 에 대해 audit trail 이 생성되지 않았음을 알 수 있다. 이는 statement_type default select 이기 때문이다.

 

SQL> select count(*) from employees;

 

  COUNT(*)

----------

       107

 

 

SQL> @fgalog

 

 SESSIONID TIMESTAMP SQLTEXT

---------- --------- ------------------------------

       286

 

object_name policy_name 만 정의해도 audit policy 추가가 가능하다. 이 경우 default 값에 의해 select 구문의 어떤컬럼에도 조건없이 auditing 을 실시한다.

아래 예제부터는 편의상 audit_trail dbms_fga.db + dbms_fga.db_extended 로 사용하겠다.

 

<SELECT-LIST 정의>

begin

        dbms_fga.add_policy(

                object_name=>'EMPLOYEES',

                policy_name=>'P2',

                audit_column=>'SALARY',

                audit_trail=>dbms_fga.db+dbms_fga.db_extended);

end;

/

 

위 구문은 audit_trail 항목을 추가했다. 위와같이 db extended 를 같이 사용하면 db_extended 를 의미한다. 이것은 sqltext sqlbind 까지 auditing 하겠다는 것을 의미한다.

 

예제는 여기까지이다. sqlbind, sqltext 를 추가하는 부분과 handler module 을 사용하는 예제는 추후에 진행하도록 하겠다.

 

/*+ dbms_fga.db + dbms_fga.db_extended 모드로 sqltext, sqlbind 캡쳐*/