사용자 도구

사이트 도구


study:oracle:10gadmin:dbsecurity:onepage

Database Security

  1. 데이터와 서비스 접근 제한 : 개인정보 유출 방지, 중요한 데이터 보호 등을 위해 최소 권한 부여 또는 상세감사(FGA)를 통해 데이터 접근을 제한
  2. 사용자 인증
    • 암호 기반(Password based) 인증
    • 인증서 기반(Certificate based) 인증 : 표준 기반 PKI(Public Key Infrastructure) 제공. PKI 인증이 Oracle Wallet이나 Smart Card에 저장될 수 있음
    • 커버로스 인증서(Kerberos credential) : 데스크탑 사인온(sign-on)을 통한 인증
    • 생물학적 정보(Biometric) 인증 : 지문, 뼈구조 패턴, 홍채 스캔 등을 통한 인증
  3. 의심스런 작업에 대한 모니터링 : 신용카드 정보, 연구 결과, 중요한 정보 등이 유출 되거나 원래 목적을 벗어난 것을 방지 하기 위한 모니터링

최소 권한 원칙

  1. 최소 권한 원칙
    • 작업에 필요한 만큼의 권한을 부여한다.
    • 사용자가 효율적이고 간결하게 작업을 실시할 수 있도록 하기 위해서, 사용자에게 최소 권한을 주는 것이 안전하다.
  2. 최소 권한 원칙 부여
    • 데이터 사전 보호 활성화
    • Public 으로 부터 불필요한 권한 회수
    • 사용자 디렉토리에 접근 제한
    • Admin권한 제한
    • 원격 DB인증 제한

데이터사전 보호 활성화

  • 초기화 파라미터 설정
    1. 07_DICTIONARY_ACCESSIBILITY = BOOLEAN
    2. FALSE : DBA권한으로 접속한 관리자만 데이터 사전 제어 가능. default(9i 이후부터)
    3. TRUE : 'ANY'의 시스템 권한을 가지는 일반 사용자가 데이터 사전 삭제 가능(8i까지 default)
  • Select ANY DICTIONARY : 일반 사용자가 데이터 사전 뷰의 접근이 필요한 경우, 이 권한만 부여 한다.

Public으로부터 불필요한 권한 회수

  1. 개요 : DB서버의 사용자 그룹 PUBLIC으로부터 불필요한 권한과 롤(Role)을 회수
    • PUBLIC : 시스템 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있다.
  2. 오용 가능성 있는 PL/SQL 패키지
    1. UTL_SMTP
      • A 사용자가 B, C, D 등의 다른 사용자에게 메일을 보낼 수 있게 한다.
      • 패키지에 PUBLIC권한 부여 : 메일의 부정한 교환이 가능해진다.
    2. UTL_TCP
      • DB서버로 네트워크 서비스에 대한 외부의 네트워크 접속을 허용한다.
      • 패키지에 PUBLIC권한 부여 : DB에서 외부의 네트워크 서비스로 임의의 데이터를 보내는것이 가능해진다.
    3. UTL_HTTP
      • DB서버가 HTTP를 이용해 데이터를 요구하고 얻을 수 있게 한다.
      • 패키지에 PUBLIC권한 부여 : HTML폼으로 특정 웹사이트에 악의적인 목적으로 임의의 데이터를 보내는 것이 가능해진다.
    4. UTL_FILE
      • 부적절하게 구성되었을 경우 이 패키지는 호스트 OS 시스템의 어떤 파일에 대해서도 텍스트 레벨에서의 액세스를 허용한다.
      • 적절하게 구성 되었을 경우에도 이 패키지는 호출하고 있는 애플리케이션을 구별하지 않으므로 UTL_FILE에서 액세스하고 있는 애플리케이션이
        다른 애플리케이션에 의해 쓰여지고 있는 같은 위치에 임의의 데이터를 쓰는 것이 가능하게 된다.
    5. DBMS_OBFUSCATION_TOOLKIT(DOTK)
      • 데이터에 암호화 적용하는 패키지. 대부분의 DB 환경에 적절한 수준의 보완 환경 제공
      • 패키지에 PUBLIC권한 부여 : 암호화된 데이터가 안전하게 저장 • 관리 되어지지 않으므로 복구 불가
      • 단점 : 숙련된 해커의 공격에 쉽게 무력화됨
      • DBMS_CRYPTO(=DOTK 기능 + α) : 10g 추가된 강력한 암호화 패키지. 암호화를 수동으로 처리. 기존 함수와 프로시져에 대해서도 보다 개선된 기능 제공

OS 디렉토리 접근 제한

  1. 목적 : ORACLE_HOME 디렉토리 자체와 그 하위에 위치하는 파일과 디렉토리에 접근을 제한해서 보안을 강화한다.
  2. UTL_FILE_DIR 파라미터 사용으로 OS 디렉토리 접근 제한 가능
    • PL/SQL 파일의 I/O 디렉토리를 지정한다.
    • DB 사용자는 이 파라미터에 명시된 OS 디렉토리를 read/write 한다.
    • SPFile에 이 파라미터를 설정하나, 동적 파라미터가 아니므로 인스턴스를 재시작 해야 한다.
    • 인스턴스 시작 할 때 디렉토리 존재 유무를 확인하지 않으므로, 파라미터에 먼저 디렉토리를 지정한 후에 디렉토리를 생성해도 된다.
    • “UTL_FILE_DIR = *” 설정 NO : 데이터 파일 및 리두 로그 디렉토리를 포함한 오라클 인스턴스와 관련된 모든 디렉토리에 접근할 수 있기 때문에 피한다.
    • 작성 규칙
      1. 대소문자가 혼합된 긴 디렉토리명 사용 가능하며, 대소문자 구별한다.
      2. 공백이 들어간 디렉토리명 : DOUBLE QUOTES(“”)로 감싼다. ex) UTL_FILE_DIR=“E:\LOG DIR”
      3. 2개 이상의 디렉토리명을 지정하는 방법 : 구분된 라인으로 지정하면 안 되고, 연속적인 하나의 라인에 디렉토리를 지정하여야 하는데,
        그러기 위해서는 각 디렉토리명을 single quotes()로 분리시킨다. - 디렉토리명에 환경변수를 사용하면 안 된다. ==== Admin 권한 제한 ==== - 심각한 문제를 일으킬 수 있는 과도한 권한은 제한한다. * sys 권한 : SYSDBA & SYSOPER * DB • 사용자에게 SYSTEM & OBJECT 권한 부여 및 권한 수 * 필요성 : “DROP ANY TABLE”, “CREATE ANY TABLE” 등의 과도한 권한 부여로 테이블 삭제나 절단, 불필요한 생성 같은 사용자 과실의 문제가 발생한다. ==== 원격 클라이언트 사용자 인증 ==== * 초기화 파라미터 설정 - REMOTE_OS_AUTHENT = BOOLEAN''
    1. TRUE : 오라클 DB에 접속하려는 원격 클라이언트 사용자의 인증을 위임하므로 DB는 모든 클라이언트를 암묵적으로 신뢰하게 된다.
      • 문제점 : 클라이언트 PC가 웜 바이러스에 감염되었거나 악성 코드에 감염 되었다면,
        원격으로 접속하는 클라이언트 PC의 보안 상태를 보장 하지 않으므로 보안을 약화 시킨다.
    2. FALSE : 원격인증 금지. 원격 클라이언트들이 접근할 때 서버가 인증 작업을 수행하도록 설정하여 보안을 강화 시킴.(9i부터 default)

TDE(Transparent Data Encryption)

  1. TDE 사용 목적 : 주민번호, 신용카드번호, 비밀번호 등의 정보를 저장한 백업 미디어의 암호화 데이터를 보호하기 위해서,
    TDE를 사용해 네트워크와 DB 내부에 투명하게 데이터를 암호화한다.
  2. 장점
    • 기존의 애플리케이션을 수정하는 일 없이 간단히 암호화 가능
    • 암호화 대상의 테이블의 인덱스도 암호화 하므로, where 절의 equal연산에 대한 성능은 거의 저하되지 않는다. (단, like연산에서는 성능이 저하 됨)
      cf) 일반적이 암호화 : 인덱스 데이터는 암호화 되지 않기 때문에 기존의 인덱스에서 문제 발생
    • 관리자는 “ALTER TABLE” 구문으로 테이블의 보안이 필요한 컬럼을 암호화 할 수 있다.
    • 신규 테이블 작성 하는 경우 : 테이블 정의에서 암호화 키워드 지정 한다.
      CREATE TABLE ORDERS (
             ORDER ID NUMBER(12) NOT NULL,
             CUSTOMER_ID NUMBER(12) NOT NULL,
             CREDIT_CARD VARCHAR2(19) ENCRYPT
      );

DBCA(DataBase Configuration Assistant)에서 사용자 관리

  1. Default 사용자 계정을 잠그고 기한 경과(expired)로 설정 변경한다.
    1. SYS, SYSTEM, SYSMAN, DBSNMP 사용자 : 암호를 동일하거나 다르게 설정 가능
    2. 계정 중에서 정기적으로 액세스할 필요가 있는 계정만 UNLOCK으로 잠금 해제하며, 유효한 비밀번호를 할당한다.
    3. 10g 특징
      • default 비밀번호가 없어지고 반드시 비밀번호를 따로 설정해야 한다.
      • SCOTT, HR같은 샘플 스키마의 상태를 잠금 해제로 변경 한 후, 이 스키마로 접속 할 때에는 비밀번호를 재설정해야 접속 가능하다.
  2. 관리자와 모든 사용자의 default 비밀번호 변경 : 설치 중에 DBCA에서 비밀번호를 설정하거나, 설치 후에 EM에서 변경한다.
  3. 비밀번호 변경 목적 : 불순한 목적의 침입자가 DB계정에 접근해서 샘플 스키마 접속에 성공해, 이 스키마를 통해서
    스트레스성 스크립트를 실행함으로써 DB에 많은 부하를 증가 시킬 수 있다.
  4. 사용자 프로파일과 비밀번호 관리 : 기본 비밀번호 관리 규칙을 모든 사용자와 비밀번호에 적용해 사용자가 정기적으로 비밀번호를 변경할 것을 권고한다.
종류 설명
계정 잠금FAILED_LOGIN_ATTEMPTS, PASSWORD_LOCK_TIME
ALTER USER명령어나 EM에서 변경 가능하며, 비밀번호 시도 횟수와 잠금 시간과 관련된 파라미터이다.
비밀번호 기간경과PASSWORD_LIFE_TIME, PASSWORD_GRACE_TIME
애플리케이션 계정에도 적용되며, 비밀번호 생명 주기와 관련된 파라미터이다.
비밀번호 이력관리PASSWORD_REUSE_TIME, PASSWORD_REUSE_MAX
비밀번호 재사용성과 관련된 파라미터이며, 상호 배타적이므로 하나의 파라미터가 “UNLIMITED”이면 나머지 파라미터도 “UNLIMITED”로 설정한다.
비밀번호 검사비밀번호 관리 규칙

비밀번호 프로파일 설정 파라미터

파라미터 설명
FAILED_LOGIN_ATTEMPTS계정을 잠그기 전까지 로그인 시도하다 실패한 횟수
설정 값에 도달하면 자동으로 계정을 잠근다.
PASSWORD_LOCK_TIME암호가 기간 만료되어 계정이 잠겨진 채로 남아 있었던 일수
PASSWORD_LIFE_TIME일수로 표시한 암호의 수명으로 이 기간이 지나면 기간 만료됨
PASSWORD_GRACE_TIME암호가 기간 만료된 후 첫 번째 성공적인 로그인부터 암호를 변경할 때까지의 유예기간
PASSWORD_REUSE_TIME암호가 재사용될 때까지의 일수
PASSWORD_REUSE_MAX암호가 재사용될 수 있는 최대 횟수
PASSWORD_VERIFY_FUNCTION암호를 할당하기 전 복잡성 검사를 수행할 PL/SQL 함수
SYS 소유(SYS 스키마에서 수행)이며, BOOLEAN값을 리턴한다.

비밀번호 검사 규칙

검사 규칙

  1. 최소 길이 : 4자 이상
  2. 사용자명과 비밀번호는 같을 수 없다.
  3. 비밀번호는 영문과 숫자를 같이 사용해야한다.
  4. 이전 비밀번호와 최소 3자 이상은 달라야 한다.

검사 규칙 생성방법

  1. ALTER PROFILE 명령어로 DEFAULT 프로파일의 검사 규칙 변경 가능
  2. SQL 스크립트 수행 : $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
  3. PL/SQL 함수 사용
         function_name(userid_parameter IN VARCHAR2,
                       password_parameter IN VARCHAR2,
                       old_password_parameter IN VARCHAR2)
         RETURN BOOLEAN 

EM에서 비밀번호 프로파일 관리

  1. SYS 계정으로 EM접속 → Administration Click → Users & Privileges 중에서 Profiles click → create click → General tab에서 이름을 쓰기 → Password tab 에서 설정
  2. Validation Error : General tab에서 이름을 넣지 않았을 경우 발생. 프로파일명을 기재해야만 비밀번호를 설정 할 수 있다.
  3. 비밀번호 프로파일 삭제 : Profiles에서 삭제할 프로파일 선택 → Delete click
  4. 사용자 비밀번호 프로파일 설정
    • SYS 계정으로 EM접속 → Administration Click → Users & Privileges 중에서 Users click → 프로파일 할당할 사용자 선택 → 적용 click
    • 사용자가 로그인 상태라면, 다음 번 로그인 때 설정한 프로파일은 적용된다.
    • 사용자 권한, 롤 등 수정 가능 : Edit click


의심스러운 작업에 대한 모니터링

  1. 감사(Auditng) 개요
    • 사용자의 행동을 감시하거나 DB에 관한 통계자료를 얻는 목적으로 사용된다.
    • 누가 어떠한 테이블을 언제 사용하고, 언제 어떤 작업을 하는지를 기록할 수 있다.
    • 감사를 실시하는 목적 : 권한을 받은 사용자가 주어진 권한을 이용하여 원래의 목적에 맞지 않는, 접근해서는 안 되는 중요한 데이터를 조회하거나 변경하는 것을 예방하기 위해

감사 TOOL의 비교

감사형태 감사 대상 감사 추적
표준 감사object 접근을 포함한 권한지정한 데이터
값기반 감사DML문에 의해서 변경된 데이터관리자가 지정한 구문
상세 감사컨텐츠를 기준으로 select + DML구문SQL 구문을 포함한 지정된 데이터
  1. 표준DB 감사(DB Auditing) : DB에 영향을 끼치는 작업을 감시하거나 특정 DB작업에 대한 데이터를 모니터하고 수집한다.
    이벤트에 대한 정보는 Audit Trail에 저장한다.
  2. 값 기반 감사(Value-based Auditing) : DB감사 뿐만 아니라 DML 수행에 의해서 변경된 데이터까지 감사한다. DB 트리거를 통해서 구현한다.
  3. 상세 감사(Fine-grained Auditing. FGA) : 특정 사용자의 조회(select) & DML 작업을 감사한다.

표준 DB 감사

Overview

  1. DB 감사를 통해 DB의 모든 연결에 대한 감사 : 승인되지 않은 사용자가 테이블에서 데이터를 삭제하는 경우 DBA는 DB안의 테이블의 행에 대한 성공적인 삭제 여부를 감시하는데 사용된다.
  2. 특정 DB를 모니터링하고, 그에 대한 데이터를 모으는데 사용 된다.
    ex) DBA는 업데이트 중인 테이블, 수행한 논리적 I/O 횟수 및 바쁜 시간에 시스템에 연결된 동시 사용자 수에 대한 통계 수집 가능
  3. DBA가 AUDIT_TRAIL 을 이용하여 DB 감사 기능을 활성화/비활성화 한다.
  4. AUDIT_TRAIL은 정적 파라미터이다.
  5. 로그인, SYSTEM & OBJECT 권한 수행, SQL문 사용 할 때도 감사 수행 할 수 있다.

AUDIT_TRAIL 설정

AUDIT_TRAIL Value 설명
NONE/FALUE감사 기능 비활성화
DB/TRUE감사기능 활성화, 감사결과는 SYS.AUD$에 저장됨
OSOS에서 허용하는 경우 활성화, 감사결과는 OS파일로 저장됨
DB_EXTENDED10g 추가된 기능. 감사 기능 활성화
SYS.AUD$에 저장되는 감사 추적(AUDIT TRAIL) 정보 중에 SQLBIND, SQLTEXT 컬럼 정보가 추가로 생성된다.

Specify Audit Options

정의

  1. Audit 명령을 사용하여 감사할 명령, 사용자, Objects, 권한을 지정하며,
    Audit Record가 발생할 때마다 생성할지 Session 당 한번씩 생성 할지 결정 할 수 있다.

옵션

Options Command Description
SQL Statement Auditing AUDIT TABLE ~ DDL문의 유형에 따른 감사 설정
Sucess/Failure 사용하여 제한가능
System privilege auditing AUDIT CREATE ~ 사용되는 권한에 따른 감사 설정
유저이름 또는 Sucess/Failure 사용하여 제한가능
Object privilege auditing AUDIT ~ on schema.objectname 특정 스키마의 개체의 명령문에 대한 감사 설정
Sucess/Failure 사용하여 제한할 수 있으며 세션이나 액세스별 그룹화도 가능
NOAUDIT NOAUDIT ~ 설정한 감사 기능을 제거한다

예제

  1. Statement Auditing
    • scott 사용자가 테이블에 관련된 명령(CREATE TABLE, DROP TABLE etc)이 성공한 경우 기록됨
       AUDIT TABLE BY SCOTT BY ACCESS WHENEVER SUCCESSFUL;
  2. Privilege Auditing
    • scott 사용자가 “CREATE TABLE” 권한이 필요한 명령을 수행한 경우 기록됨
       AUDIT CREATE TABLE BY SCOTT BY SESSION; 
  3. (Schema)Object Auditing
    • scott.emp테이블에 대한 모든 명령(select, DML etc)에 관한 사항이 기록됨
       AUDIT ALL ON SCOTT.EMP; 
  4. NOAUDIT
    • scott.emp테이블 설정한 감사 기능이 제거됨
       NOAUDIT ALL ON SCOTT.EMP;

기타 감사 관련 정보

Execute Command 감사 기능이 지정된 명령어를 사용자가 수행한다.
즉, 사용자가 SQL or PL/SQL문을 실행 할 때 서버 프로세스는
감사 옵션을 검색하여 실행중인 문장이 감사 대상에 포함되는지 여부를 결정한다.
Generate Audit Trail AUDIT_TRAIL 파라미터에 정의된 값에 따라 OS의 파일 또는 DB 내에 SYS.AUD$에 AUDIT_TRAIL 레코드를 생성한다.
이 작업은 사용자의 트랜잭션과 무관하므로 Transaction Rollback이 수행될지라도 AUDIT_TRAIL 레코드는 그대로 유지된다.
AUDIT_TRAIL 레코드는 구문의 execute 단계에서 생성되므로 Parsing 단계에서 오류가 발생되면 생성 되지 않는다.
Review Audit Information 감사 설정, 감사를 통해 생성된 정보는 Audit Trail Data Dictionary View를 통해 확인 할 수 있다.
OS에 생성된 Audit_trail인 경우 OS Utility를 사용해서 확인한다.
이 정보를 토대로 의심이 가는 작업을 확인하거나 DB작업에 대한 모니터링을 할 수 있다.

Audit Trail Data Dictionary View

View Description
STMT_AUDIT_OPTION_MAP감사 옵션 타입 코드에 대한 정보를 보여준다.
AUDIT_ACTIONSAudit_trail Action 타입 코드에 대한 설명을 포함한다.
ALL_DEF_AUDIT_OPTSObject가 생성될 때 적용될 수 있는 기본적인 Object-auditing 옵션을 보여준다.
DBA_STMT_AUDIT_OPTS시스템과 사용자에 걸쳐 현재 시스템의 감사 옵션을 보여준다.
DBA_PRIV_AUDIT_OPTS시스템과 사용자에 걸쳐 감사되고 현재 시스템 권한을 보여준다.
DBA_OBJ_AUDIT_OPTS
USER_AUDIT_OPTS
모든 Object에 대한 감사 옵션을 보여준다.
USER뷰는 현재 사용자가 소유한 모든 Object의 감사 옵션을 보여준다.
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL
모든 Audit Trail 엔트리를 리스트한다.
USER뷰는 현재 사용자에 관련된 Audit Trail 엔트리를 보여준다.
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
시스템의 모든 Object에 대한 Audit Trail 레코드를 보여준다.
USER뷰는 현재 사용자가 접근할 수 있는 Object와 관련된 구문에 대한 Audit Trail 레코드를 리스트한다.
DBA_AUDIT_SESSION
USER_AUDIT_SESSION
CONNECT와 DISCONNECT에 관련된 모든 Audit Trail 레코드를 리스트한다.
USER뷰는 현재 사용자에 대한 연결 설정과 해제에 관련된 모든 Audit Trail 레코드를 리스트한다.
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT
DB 전반적으로 Grant, Revoke, Audit, NOAUDIT, Alter system 구문과 관계되는 Audit Trail 레코드를
리스트 한다.
USER뷰는 현재 사용자와 관련된 내용만을 보여준다.
DBA_AUDIT_EXISTSAUDIT EXISTS와 AUDIT NOT EXISTS와 관련된 Audit Trail 엔트리를 리스트한다.

XML 형식의 Audit Trail 지원(10gR2)

  • 파일시스템에 감사기록(Audit Trail) 저장하면, 시스템의 보안 수준을 강화 할 수 있다.
  • 초기화 파라미터에 설정하기
    1. 인스턴스 재시작 : 동적 매개변수가 아니므로 인스턴스를 재시작한다.
    2. 감사기록은 “audit_file_dest”에서 지정한 경로의 디렉토리에 저장 된다.
    3. audit_file_dest에 매개변수 미지정 시 default : $ORACLE_HOME/rdbms/audit(UNIX/Linux)
      Windows Event Log(Windows)
    4. 감사 기록 파일의 저장 형식은 “.xml”이다.
    5. xml형식의 장점
      • 감사기록을 XML 타입으로 DB에 로드하고, XML Query를 이용하여 조회 가능
      • XML과 SQL Query를 조합하여, 단일 SQL 소스에 대해 질의하는 것처럼 정보 조회 가능
      • DBA는 Third Party XML parser/editor를 활용하여 XML 형식으로 저장된 감사 기록 조회 가능
      • XML입력 지원 툴을 통해 리포트 생성 가능
      • 감사 기록 조회를 위해 parser를 직접 구현할 필요 없음
      • V$XML_AUDIT_TRAIL : DBA_AUDIT_TRAIL과 구조면에서 유사
            audit_file_dest = 'directory path & name'
            audit_trail = XML 

Value-Based Auditing

Overview

  • trigger를 사용해서 데이터의 액세스나 조작이 일어나기 전 • 후의 내용을 관리자가 관리하는 테이블로 저장하는 방식이다.
  • DML 수행에 의해서 컬럼과 로우의 값이 변경 될 때, trigger를 사용해서 감사를 수행한다(이벤트 중심의 PL/SQL 구성요소).
  • DML문 수행시마다 trigger code가 수행되므로 표준 감사보다 성능은 저하된다.
  • 사용자 접속 정보, 사용자의 IP 주소, 인스턴스에 접속한 프로그램 이름의 첫 48자, 인스턴스 접속한 터미널명을 capture할 수 있다.

수행 방법

  • 사용자가 값 변경 시도 → Trigger 수행 → 사용자의 변경은 실행되고, trigger에 의해서 감사 레코드 생성 → audit trail 테이블에 생성된 감사 레코드 삽입

Fine-Grained Auditing(FGA)

FGA 정의

  • 특정 데이터의 조회(select) & DML 작업을 감사한다.

FGA 특징

  1. 더 상세한 레벨의 감사 기능 제공 : 선택적인 감사를 위해 where절을 사용한다.
  2. 뷰나 테이블의 특정 컬럼 참조 또는 액세스 여부, 값 변경에 대해서 감사한다.
  3. DBMS_FGA 패키지를 이용하여 활성화/비활성화 : trigger를 사용하는 것이 아니므로 성능은 표준 감사와 비슷하다.
  4. CBO(Cost Based Optimizer)를 사용하는 경우에도 정상 작동 : 인스턴스 레벨로 CBO 설정 및 액세스 되는 테이블에 대한 분석이 수행되어 있어야 하며,
    SQL에 힌트를 사용하면 안 된다.
  5. Audit Trail Record는 SYS.FGA_LOG$에 저장된다.
  6. 생성되는 감사기록(Audit Trail)의 양은 적고, 프로그램에서 사용된 sQL문에 대한 정보와 BIND정보 등을 제공하므로 실제로 수행된 SQL문에 대한 파악이 용이하다.
  7. 과거 데이터를 재구성하는데 필요한 로우 레벨 변경 내역과 SCN값을 제공한다.
  8. 특정 스키마 내의 테이블에 수행한 select(조회) & DML 구문(10g에 추가된 기능)에 대해 감사한다.
  9. 컨텐츠를 기준으로 데이터 접근을 모니터링 할 수 있다.
  10. 제한된 감사 수행 : 정책을 통해 관리자는 감사기준이 되는 컬럼과 조건을 설정하면, 특정 DML구문 유형 또는 관리자가 지정한 특정 컬럼에 대해서만 감사 수행
  11. 감사 이벤트가 발생했을 때 호출할 루틴(PL/SQL 패키지 또는 프로시저)의 이름 지정 가능

FGA 정책 생성

  1. DBMS_FGA.ADD_POLICY 명령 사용
  2. 프로시저
파라미터 데이터 타입 설명
object_schemaVARCHAR2FGA에서 설정하고자 하는 스키마명
object_nameVARCHAR2FGA에서 설정하고자 하는 객체명(테이블, 뷰 이름)
policy_nameVARCHAR2FGA에서 설정하고자 하는 Policy명(Unique)
audit_conditionVARCHAR2상세 감사 지정. 스키마 객체에 대한 논리적인 데이터 그룹에 상응하는 where 절 지정
ex) “department_id=10” 으로 지정 : 조회대상 객체에 AUDIT_CONDITION을 만족하는 데이터가 있다면, 명시적인 조건을 만족하지 않아도 Audit Trail은 생성된다.
SELECT … FROM employees;
⇒ where 절에 조건 없이 전체를 조회하는 것 역시, AUDIT_CONDITION에 지정한 “department_id=10”인 데이터도 조회되므로 이 문장도 FGA의 대상이다.
audit_columnVARCHAR2감사 대상이 되는 컬럼명 지정. 1개 이상의 컬럼 지정 가능(10g 추가 기능)
handler_schema
handler_module
VARCHAR2FGA설정에 의해서 Audit Trail이 생성될 때 같이 실행될 수 있는 프로시저를 작성하는 경우, 프로시저의 스키마명과 프로시저명을 기술
프로시저 생성 패턴 : PROCEDURE <fname>(object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2) AS …
enableBOOLEANFGA 기능 활성화 여부 지정. default가 TRUE임에도 불구하고 TRUE로 설정하지 않으면 FGA 설정이 활성화되지 않는다.
statement_typesVARCHAR210g 추가된 기능. FGA가 적용되는 문장 종류에 대해서 기술. INSERT, UPDATE, DELETE, SELECT(default) 중에서 지정하며,
MERGE문은 내부적으로 INSERT 또는 UPDATE의 지정의 영향을 받음
audit_trailBINARY_INTEGER IN DEFAULT10g 추가된 기능. “AUDIT_TRAIL ⇒ DBMS_FGA.DB_EXTENDED”로 설정하는 경우 SYS.FGA_LOG$의 LSQLTEXT, LSQLBIND컬럼에 Audit Trail이 생성된다.
audit_trail_optsBINARY_INTEGER IN DEFAULT10g 추가된 기능. DBMS_FGA.ALL_COLUMNS & DBMS_FGA.ANY_COLUMNS
DBMS_FGA.ALL_COLUMNS : AUDIT_COLUMN에 나열된 컬럼 중에서 모두 액세스될 때 AUDIT TRAIL을 생성하도록 지정
DBMS_FGA.ANY_COLUMNS : AUDIT_COLUMN에 나열된 컬럼 중에서 하나라도 액세스될 때 AUDIT TRAIL을 생성하도록 지정

FGA정책 활성화

  1. 메타데이터 정보를 전혀 손실하지 않고도 임시로 FGA 정책의 활성화/비활성화 할 수 있다.
  2. DBMS_FGA.ENABLE_POLICY(활성화) / DBMS_FGA.DISABLE_POLICY(비활성화)

FGA정책 삭제

  1. 더 이상 정책이 필요하지 않을 경우 삭제 가능
  2. DBMS_FGA.DROP_POLICY 명령 사용

FGA DATA DICTIONARY VIEW

VIEW NAME DESCRIPTION
DBA_AUDIT_POLICIESFGA 정책 설정에 대한 정보. ALL/DBA/USER_뷰가 모두 존재한다.
DBA_AUDIT_POLICY_COLUMNFGA 정책 컬럼에 대한 정보. ALL/DBA/USER_뷰가 모두 존재한다.
DBA_FGA_AUDIT_TRAILFGA설정에 따른 AUDIT TRAIL 정보
DBA_COMMON_AUDIT_TRAILDB 감사와 FGA 정보(통합적인 감사 정보) 확인
DBA_AUDIT_TRAIL, DBA_FGA_AUDIT_TRAIL의 UNION으로 구성

DBA_FGA_AUDIT_TRAIL

파라미터 설명
TIMESTAMP감사 기록의 시간
DB_USERDB 사용자 이름
OS_USEROS 사용자 이름
OBJECT_SCHEMA감사 대상인 객체의 스키마명
OBJECT_NAME감사 대상인 객체명
POLICY_NAME감사 이벤트를 수행할 정책명
SCN(System Change Number)변경 전의 값을 확인 할 때 사용된다.
sQL_TEXT감사 대상인 SQL 구문
SQL_BIND바인드 변수. 형식 : #n(s):v:
#n: 문장에서 n번째 바인드 변수를 나타냄
#s: 바인드 변수 길이
v: 바인드 변수 값
COMMENT$TEXT설명

FGA Guidelines

Audit Condition FGA 정책 생성시, 감사 상태는 null(default. 모든 문장은 감사 대상이다.)이다
Policy Name Error 정책명은 DB내에서 고유해야 하며 소유자가 없다.(ORA-28101 에러 발생)
Audited Object Errors 감사 대상인 테이블이나 뷰는 정책을 생성할 때 존재해야한다. (ORA-00942 에러 발생)
Audit Condition Errors 정책 생성시 에러가 없더라도 감사 상태가 잘못된 문법을 가지고 있다면 에러 발생한다(ORA-28112)
Audit Column Errors 정책 생성 후 테이블에서 컬럼이 없으면 안된다. 감사 컬럼이 없다면 액세스 될 수 없기 때문에 로우는 감사되지 않는다.
감사 컬럼명이 유효하나 정확하지 않다면 다른 로우가 수행될 수 있다.
Event Handler Error 정책이 존재하지 않거나 유효하지 않은 이벤트 핸들러를 참조 할 때 정책은 생성될 수 있으나,
감사 이벤트가 발생할 때 리턴하는 로우는 없다.
  1. SELECT 문의 경우 FGA는 실제 행이 아니라 명령문 자체를 캡쳐합니다.
    그러나 FGA가 Flashback Query와 결합된 경우 해당 시점에서 행이 존재하기 때문에 행이 재구성될 수 있습니다.

보안 패치 업데이트

  1. 오라클 DB와 OS 시스템 모두 최신의 보안 패치를 항상 적용한다.
  2. OTN보안 관련 페이지에서 공개된 보안 경고를 정기적으로 확인한다.

요약

  1. 오라클 설치 시 필요한 옵션만 선택적으로 설치한다.
  2. Default 사용자 관리를 철저히 한다.
    • 관리자 & 일반 사용자 비밀번호 관리
    • 데이터 사전 보호 활성화
  3. 최소 권한 부여
    • SYSTEM & OBJECT 권한 수 확인
    • DB에 SYS권한 접속 수 감소
    • PUBLIC으로부터 불필요한 권한 회수
    • 사용자에게 필요한 권한이 있는 ROLE을 부여
  4. 효과적인 액세스 제어
    • 원격 클라이언트 사용자의 인증 : 서버가 인증 작업 수행
    • OS 사용자 수 제한 : ORACLE_HOME 디렉토리와 그 하위의 파일 및 디렉토리 액세스 권한 제한
  5. 네트워크 • 액세스 제한
    • 오라클 리스너의 부정한 변경 예방 : 리스너 원격 변경 불가로 설정
    • 네트워크 IP 주소 확인 : 공격 가능성 있는 서비스 방해 예방. ORACLE NET의 “신뢰하는 노드 체크” 보안 기능 사용해 해당 IP가 오라클 서버 프로세스에 접근 허용
    • 네트워크의 통신 패킷 암호화 : 클라이언트, DB와 애플리케이션 서버 간의 네트워크 통신 패킷 암호화
    • OS 시스템 안전하게 한다 : 불필요한 OS 시스템 서비스를 비활성화해서 보안 강화
  6. 데이터의 암호화가 필요한 경우 TDE사용
  7. 보안 패치 적용과 보안 패치 업데이트
study/oracle/10gadmin/dbsecurity/onepage.txt · 마지막으로 수정됨: 2008/05/20 20:52 저자 starlits