1) AUDIT 명령어
이 명령어는 4가지 모드의 데이터베이스 감시 기능을 제공합니다.
먼저, 첫 번째 감시 기능은 데이터베이스 내에서 특정 SQL 언어(CONNECT문, DROP TABLE, ALTER TABLE 등)가 실행될 때 언제, 어떤 사용자에 의해, 어떤 명령어가 실행되었고 실행 결과가 성공했는지, 실패했는지에 대한 로그 정보를 남기는 방법입니다.
두 번째 감시 기능은 특정 권한(SYSTEM Privilege 또는 OBJECT Privilege)이 실행되었을 때 그 상태 정보를 남기는 방법이며 세 번째 감시 기능은 특정 사용자가 특정 객체(테이블, 인덱스, 뷰 등)을 조작할 때 상태 정보를 남기며 네 번째 방법은 네트워크 상태를 감시하며 특정 Action(V$SESSION의 COMMAND 컬럼 참조)이 발생할 때 관련 로그정보를 남김으로써 데이터베이스 내에서 일어나는 의심스러운 행위를 감시하고 데이터에 대한 안전한 보안 기능을 설정하는 방법입니다.
### html
SQL> AUDIT connect BY scott BY SESSION WHENEVER SUCCESSFUL; ? 문장 Level
SQL> AUDIT create table BY scott BY SESSION WHENEVER SUCCESSFUL; ? 권한 Level
SQL> AUDIT delete on emp BY SESSION WHENEVER NOT SUCCESSFUL; ? 객체 Level
SQL> AUDIT 12 BY scott BY SESSION WHENEVER NOT SUCCESSFUL; ? 네트워크 Level
2) DBMS_FGA 패키지
앞서 소개 드린 AUDIT 명령어를 통해 특정 테이블에 대한 보안, 감시활동의 수행은 다소 제한적인 기능 만을 제공한다면 다음에 소개하는 DBMS_FGA 패키지는 구체적이며 상세한 조건의 감시 활동이 가능하도록 만들어진 기능입니다.
### html
DBMS_FGA.ADD_POLICY ( object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'MYPOLICE1',
audit_condition => 'SAL < 100',
audit_column => 'COMM, SAL',
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => 'INSERT, UPDATE',
audit_trail => DBMS_FGA.DB,
audit_column_opts => DBMS_FGA.ANY_COLUMNS);
위 예제는 DBMS_FGA 패키지의 ADD_POLICY 프로시저를 통해 SCOTT 사용자의 EMP 테이블에 대한 감시 내역입니다.
감시 대상은 EMP 테이블의 COMM, SAL 컬럼이며 누군가가 INSERT, UPDATE문을 실행할 때 SAL 컬럼의 데이터가 100보다 작은 경우 로그 정보를 남길 수 있도록 환경 설정하는 방법입니다.
### html
SQL> SELECT * FROM DBA_AUDIT_POLICIES;
OBJECT_SCHEMA OBJECT_NAME ENA SEL INS UPD DEL
-------------- ------------------------- --- --- --- --- ---
SCOTT EMP YES NO YES YES NO
DBMS_FGA.DROP_POLICY : 생성된 감시 정책을 삭제할 때 사용됩니다.
DBMS_FGA.ENABLE_POLICY : 생성된 감시 정책을 사용 가능하도록 환경 설정해 줍니다.
DBMS_FGA.DIABLE_POLICY : 생성된 감시 정책을 사용 없도록 환경 설정해 줍니다.
3) 데이터베이스 트리거를 이용한 의심스러운 사용자의 세션 제한 기능
데이터베이스를 운영, 관리하다 보면 중요한 테이블에 대해 누군가가 의심스런 입력, 수정, 삭제, 조회 작업을 수행하는 경우들이 종종 발생합니다.
하나의 기업 내에 근무하는 개발자, 데이터베이스 관리자라고 하더라도 인가되지 않은 사용자가 관련 없는 데이터를 참조하는 것은 때에 따라서는 제한되어야 합니다.
### html
[C:\] SQLPLUS SYSTEM/MANAGER
SQL> CREATE OR REPLACE TRIGGER ip_control
AFTER LOGON ON SCOTT.SCHEMA
BEGIN
IF SUBSTR(sys_context('USERENV','IP_ADDRESS'),1, 15)
in (‘192.168.123.101’) then
RAISE_APPLICATION_ERROR ( -
20002, 'IP '||ORA_CLIENT_IP_ADDRESS
|| ' is not allowed to connect database as SCOTT!');
END IF;
END;
이것을 구현할 수 있는 방법은 여러 가지가 있지만 그 중에서도 SYS_CONTEXT 함수를 사용하여 원치 않는 IP Address를 가진 사용자의 접속을 근본적으로 차단하는 보안 설정방법에 대해 알아 보겠습니다.
### html
[C:\] SQLPLUS scott/tiger
192.168.123.101 is not allowed to connect database as SCOTT!
192.168.123.101 IP Address를 가진 클라이언트가 SCOTT 계정으로 데이터베이스에 접속을 시도할 때 "192.168.123.101 is not allowed to connect database as SCOTT!"이라는 메시지를 클라이언트의 화면에 출력하고 접속을 제한하게 됩니다.
192.168.123.101 IP Address를 가진 사용자의 PC에서 다음 문장을 실행합니다.