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 캡쳐*/