study:oracle:10gadmin:dbsecurity:onepage
목차
Database Security
- 데이터와 서비스 접근 제한 : 개인정보 유출 방지, 중요한 데이터 보호 등을 위해 최소 권한 부여 또는 상세감사(FGA)를 통해 데이터 접근을 제한
- 사용자 인증
- 암호 기반(Password based) 인증
- 인증서 기반(Certificate based) 인증 : 표준 기반 PKI(Public Key Infrastructure) 제공. PKI 인증이 Oracle Wallet이나 Smart Card에 저장될 수 있음
- 커버로스 인증서(Kerberos credential) : 데스크탑 사인온(sign-on)을 통한 인증
- 생물학적 정보(Biometric) 인증 : 지문, 뼈구조 패턴, 홍채 스캔 등을 통한 인증
- 의심스런 작업에 대한 모니터링 : 신용카드 정보, 연구 결과, 중요한 정보 등이 유출 되거나 원래 목적을 벗어난 것을 방지 하기 위한 모니터링
최소 권한 원칙
- 최소 권한 원칙
- 작업에 필요한 만큼의 권한을 부여한다.
- 사용자가 효율적이고 간결하게 작업을 실시할 수 있도록 하기 위해서, 사용자에게 최소 권한을 주는 것이 안전하다.
- 최소 권한 원칙 부여
- 데이터 사전 보호 활성화
- Public 으로 부터 불필요한 권한 회수
- 사용자 디렉토리에 접근 제한
- Admin권한 제한
- 원격 DB인증 제한
데이터사전 보호 활성화
- 초기화 파라미터 설정
- 07_DICTIONARY_ACCESSIBILITY = BOOLEAN
- FALSE : DBA권한으로 접속한 관리자만 데이터 사전 제어 가능. default(9i 이후부터)
- TRUE : 'ANY'의 시스템 권한을 가지는 일반 사용자가 데이터 사전 삭제 가능(8i까지 default)
- Select ANY DICTIONARY : 일반 사용자가 데이터 사전 뷰의 접근이 필요한 경우, 이 권한만 부여 한다.
Public으로부터 불필요한 권한 회수
- 개요 : DB서버의 사용자 그룹 PUBLIC으로부터 불필요한 권한과 롤(Role)을 회수
- PUBLIC : 시스템 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있다.
- 오용 가능성 있는 PL/SQL 패키지
- UTL_SMTP
- A 사용자가 B, C, D 등의 다른 사용자에게 메일을 보낼 수 있게 한다.
- 패키지에 PUBLIC권한 부여 : 메일의 부정한 교환이 가능해진다.
- UTL_TCP
- DB서버로 네트워크 서비스에 대한 외부의 네트워크 접속을 허용한다.
- 패키지에 PUBLIC권한 부여 : DB에서 외부의 네트워크 서비스로 임의의 데이터를 보내는것이 가능해진다.
- UTL_HTTP
- DB서버가 HTTP를 이용해 데이터를 요구하고 얻을 수 있게 한다.
- 패키지에 PUBLIC권한 부여 : HTML폼으로 특정 웹사이트에 악의적인 목적으로 임의의 데이터를 보내는 것이 가능해진다.
- UTL_FILE
- 부적절하게 구성되었을 경우 이 패키지는 호스트 OS 시스템의 어떤 파일에 대해서도 텍스트 레벨에서의 액세스를 허용한다.
- 적절하게 구성 되었을 경우에도 이 패키지는 호출하고 있는 애플리케이션을 구별하지 않으므로 UTL_FILE에서 액세스하고 있는 애플리케이션이
다른 애플리케이션에 의해 쓰여지고 있는 같은 위치에 임의의 데이터를 쓰는 것이 가능하게 된다.
- DBMS_OBFUSCATION_TOOLKIT(DOTK)
- 데이터에 암호화 적용하는 패키지. 대부분의 DB 환경에 적절한 수준의 보완 환경 제공
- 패키지에 PUBLIC권한 부여 : 암호화된 데이터가 안전하게 저장 • 관리 되어지지 않으므로 복구 불가
- 단점 : 숙련된 해커의 공격에 쉽게 무력화됨
- DBMS_CRYPTO(=DOTK 기능 + α) : 10g 추가된 강력한 암호화 패키지. 암호화를 수동으로 처리. 기존 함수와 프로시져에 대해서도 보다 개선된 기능 제공
OS 디렉토리 접근 제한
- 목적 : ORACLE_HOME 디렉토리 자체와 그 하위에 위치하는 파일과 디렉토리에 접근을 제한해서 보안을 강화한다.
- UTL_FILE_DIR 파라미터 사용으로 OS 디렉토리 접근 제한 가능
- PL/SQL 파일의 I/O 디렉토리를 지정한다.
- DB 사용자는 이 파라미터에 명시된 OS 디렉토리를 read/write 한다.
- SPFile에 이 파라미터를 설정하나, 동적 파라미터가 아니므로 인스턴스를 재시작 해야 한다.
- 인스턴스 시작 할 때 디렉토리 존재 유무를 확인하지 않으므로, 파라미터에 먼저 디렉토리를 지정한 후에 디렉토리를 생성해도 된다.
- “UTL_FILE_DIR = *” 설정 NO : 데이터 파일 및 리두 로그 디렉토리를 포함한 오라클 인스턴스와 관련된 모든 디렉토리에 접근할 수 있기 때문에 피한다.
- 작성 규칙
- 대소문자가 혼합된 긴 디렉토리명 사용 가능하며, 대소문자 구별한다.
- 공백이 들어간 디렉토리명 : DOUBLE QUOTES(“”)로 감싼다. ex) UTL_FILE_DIR=“E:\LOG DIR”
- 2개 이상의 디렉토리명을 지정하는 방법 : 구분된 라인으로 지정하면 안 되고, 연속적인 하나의 라인에 디렉토리를 지정하여야 하는데,
그러기 위해서는 각 디렉토리명을 single quotes()로 분리시킨다. - 디렉토리명에 환경변수를 사용하면 안 된다. ==== Admin 권한 제한 ==== - 심각한 문제를 일으킬 수 있는 과도한 권한은 제한한다. * sys 권한 : SYSDBA & SYSOPER * DB • 사용자에게 SYSTEM & OBJECT 권한 부여 및 권한 수 * 필요성 : “DROP ANY TABLE”, “CREATE ANY TABLE” 등의 과도한 권한 부여로 테이블 삭제나 절단, 불필요한 생성 같은 사용자 과실의 문제가 발생한다. ==== 원격 클라이언트 사용자 인증 ==== * 초기화 파라미터 설정 -REMOTE_OS_AUTHENT = BOOLEAN''
- TRUE : 오라클 DB에 접속하려는 원격 클라이언트 사용자의 인증을 위임하므로 DB는 모든 클라이언트를 암묵적으로 신뢰하게 된다.
- 문제점 : 클라이언트 PC가 웜 바이러스에 감염되었거나 악성 코드에 감염 되었다면,
원격으로 접속하는 클라이언트 PC의 보안 상태를 보장 하지 않으므로 보안을 약화 시킨다.
- FALSE : 원격인증 금지. 원격 클라이언트들이 접근할 때 서버가 인증 작업을 수행하도록 설정하여 보안을 강화 시킴.(9i부터 default)
TDE(Transparent Data Encryption)
- TDE 사용 목적 : 주민번호, 신용카드번호, 비밀번호 등의 정보를 저장한 백업 미디어의 암호화 데이터를 보호하기 위해서,
TDE를 사용해 네트워크와 DB 내부에 투명하게 데이터를 암호화한다. - 장점
- 기존의 애플리케이션을 수정하는 일 없이 간단히 암호화 가능
- 암호화 대상의 테이블의 인덱스도 암호화 하므로, 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)에서 사용자 관리
- Default 사용자 계정을 잠그고 기한 경과(expired)로 설정 변경한다.
- SYS, SYSTEM, SYSMAN, DBSNMP 사용자 : 암호를 동일하거나 다르게 설정 가능
- 계정 중에서 정기적으로 액세스할 필요가 있는 계정만 UNLOCK으로 잠금 해제하며, 유효한 비밀번호를 할당한다.
- 10g 특징
- default 비밀번호가 없어지고 반드시 비밀번호를 따로 설정해야 한다.
- SCOTT, HR같은 샘플 스키마의 상태를 잠금 해제로 변경 한 후, 이 스키마로 접속 할 때에는 비밀번호를 재설정해야 접속 가능하다.
- 관리자와 모든 사용자의 default 비밀번호 변경 : 설치 중에 DBCA에서 비밀번호를 설정하거나, 설치 후에 EM에서 변경한다.
- 비밀번호 변경 목적 : 불순한 목적의 침입자가 DB계정에 접근해서 샘플 스키마 접속에 성공해, 이 스키마를 통해서
스트레스성 스크립트를 실행함으로써 DB에 많은 부하를 증가 시킬 수 있다. - 사용자 프로파일과 비밀번호 관리 : 기본 비밀번호 관리 규칙을 모든 사용자와 비밀번호에 적용해 사용자가 정기적으로 비밀번호를 변경할 것을 권고한다.
| 종류 | 설명 |
|---|---|
| 계정 잠금 | 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값을 리턴한다. |
비밀번호 검사 규칙
검사 규칙
- 최소 길이 : 4자 이상
- 사용자명과 비밀번호는 같을 수 없다.
- 비밀번호는 영문과 숫자를 같이 사용해야한다.
- 이전 비밀번호와 최소 3자 이상은 달라야 한다.
검사 규칙 생성방법
- ALTER PROFILE 명령어로 DEFAULT 프로파일의 검사 규칙 변경 가능
- SQL 스크립트 수행 : $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
- PL/SQL 함수 사용
function_name(userid_parameter IN VARCHAR2, password_parameter IN VARCHAR2, old_password_parameter IN VARCHAR2) RETURN BOOLEAN
EM에서 비밀번호 프로파일 관리
- SYS 계정으로 EM접속 → Administration Click → Users & Privileges 중에서 Profiles click → create click → General tab에서 이름을 쓰기 → Password tab 에서 설정
- Validation Error : General tab에서 이름을 넣지 않았을 경우 발생. 프로파일명을 기재해야만 비밀번호를 설정 할 수 있다.
- 비밀번호 프로파일 삭제 : Profiles에서 삭제할 프로파일 선택 → Delete click
- 사용자 비밀번호 프로파일 설정
- SYS 계정으로 EM접속 → Administration Click → Users & Privileges 중에서 Users click → 프로파일 할당할 사용자 선택 → 적용 click
- 사용자가 로그인 상태라면, 다음 번 로그인 때 설정한 프로파일은 적용된다.
- 사용자 권한, 롤 등 수정 가능 : Edit click
의심스러운 작업에 대한 모니터링
- 감사(Auditng) 개요
- 사용자의 행동을 감시하거나 DB에 관한 통계자료를 얻는 목적으로 사용된다.
- 누가 어떠한 테이블을 언제 사용하고, 언제 어떤 작업을 하는지를 기록할 수 있다.
- 감사를 실시하는 목적 : 권한을 받은 사용자가 주어진 권한을 이용하여 원래의 목적에 맞지 않는, 접근해서는 안 되는 중요한 데이터를 조회하거나 변경하는 것을 예방하기 위해
감사 TOOL의 비교
| 감사형태 | 감사 대상 | 감사 추적 |
|---|---|---|
| 표준 감사 | object 접근을 포함한 권한 | 지정한 데이터 |
| 값기반 감사 | DML문에 의해서 변경된 데이터 | 관리자가 지정한 구문 |
| 상세 감사 | 컨텐츠를 기준으로 select + DML구문 | SQL 구문을 포함한 지정된 데이터 |
- 표준DB 감사(DB Auditing) : DB에 영향을 끼치는 작업을 감시하거나 특정 DB작업에 대한 데이터를 모니터하고 수집한다.
이벤트에 대한 정보는 Audit Trail에 저장한다. - 값 기반 감사(Value-based Auditing) : DB감사 뿐만 아니라 DML 수행에 의해서 변경된 데이터까지 감사한다. DB 트리거를 통해서 구현한다.
- 상세 감사(Fine-grained Auditing. FGA) : 특정 사용자의 조회(select) & DML 작업을 감사한다.
표준 DB 감사
Overview
- DB 감사를 통해 DB의 모든 연결에 대한 감사 : 승인되지 않은 사용자가 테이블에서 데이터를 삭제하는 경우 DBA는 DB안의 테이블의 행에 대한 성공적인 삭제 여부를 감시하는데 사용된다.
- 특정 DB를 모니터링하고, 그에 대한 데이터를 모으는데 사용 된다.
ex) DBA는 업데이트 중인 테이블, 수행한 논리적 I/O 횟수 및 바쁜 시간에 시스템에 연결된 동시 사용자 수에 대한 통계 수집 가능 - DBA가 AUDIT_TRAIL 을 이용하여 DB 감사 기능을 활성화/비활성화 한다.
- AUDIT_TRAIL은 정적 파라미터이다.
- 로그인, SYSTEM & OBJECT 권한 수행, SQL문 사용 할 때도 감사 수행 할 수 있다.
AUDIT_TRAIL 설정
| AUDIT_TRAIL Value | 설명 |
|---|---|
| NONE/FALUE | 감사 기능 비활성화 |
| DB/TRUE | 감사기능 활성화, 감사결과는 SYS.AUD$에 저장됨 |
| OS | OS에서 허용하는 경우 활성화, 감사결과는 OS파일로 저장됨 |
| DB_EXTENDED | 10g 추가된 기능. 감사 기능 활성화 SYS.AUD$에 저장되는 감사 추적(AUDIT TRAIL) 정보 중에 SQLBIND, SQLTEXT 컬럼 정보가 추가로 생성된다. |
Specify Audit Options
정의
- 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 ~ | 설정한 감사 기능을 제거한다 |
예제
- Statement Auditing
- scott 사용자가 테이블에 관련된 명령(CREATE TABLE, DROP TABLE etc)이 성공한 경우 기록됨
AUDIT TABLE BY SCOTT BY ACCESS WHENEVER SUCCESSFUL;
- Privilege Auditing
- scott 사용자가 “CREATE TABLE” 권한이 필요한 명령을 수행한 경우 기록됨
AUDIT CREATE TABLE BY SCOTT BY SESSION;
- (Schema)Object Auditing
- scott.emp테이블에 대한 모든 명령(select, DML etc)에 관한 사항이 기록됨
AUDIT ALL ON SCOTT.EMP;
- 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_ACTIONS | Audit_trail Action 타입 코드에 대한 설명을 포함한다. |
| ALL_DEF_AUDIT_OPTS | Object가 생성될 때 적용될 수 있는 기본적인 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_EXISTS | AUDIT EXISTS와 AUDIT NOT EXISTS와 관련된 Audit Trail 엔트리를 리스트한다. |
XML 형식의 Audit Trail 지원(10gR2)
- 파일시스템에 감사기록(Audit Trail) 저장하면, 시스템의 보안 수준을 강화 할 수 있다.
- 초기화 파라미터에 설정하기
- 인스턴스 재시작 : 동적 매개변수가 아니므로 인스턴스를 재시작한다.
- 감사기록은 “audit_file_dest”에서 지정한 경로의 디렉토리에 저장 된다.
- audit_file_dest에 매개변수 미지정 시 default : $ORACLE_HOME/rdbms/audit(UNIX/Linux)
Windows Event Log(Windows) - 감사 기록 파일의 저장 형식은 “.xml”이다.
- 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할 수 있다.
수행 방법
Fine-Grained Auditing(FGA)
FGA 정의
- 특정 데이터의 조회(select) & DML 작업을 감사한다.
FGA 특징
- 더 상세한 레벨의 감사 기능 제공 : 선택적인 감사를 위해 where절을 사용한다.
- 뷰나 테이블의 특정 컬럼 참조 또는 액세스 여부, 값 변경에 대해서 감사한다.
- DBMS_FGA 패키지를 이용하여 활성화/비활성화 : trigger를 사용하는 것이 아니므로 성능은 표준 감사와 비슷하다.
- CBO(Cost Based Optimizer)를 사용하는 경우에도 정상 작동 : 인스턴스 레벨로 CBO 설정 및 액세스 되는 테이블에 대한 분석이 수행되어 있어야 하며,
SQL에 힌트를 사용하면 안 된다. - Audit Trail Record는 SYS.FGA_LOG$에 저장된다.
- 생성되는 감사기록(Audit Trail)의 양은 적고, 프로그램에서 사용된 sQL문에 대한 정보와 BIND정보 등을 제공하므로 실제로 수행된 SQL문에 대한 파악이 용이하다.
- 과거 데이터를 재구성하는데 필요한 로우 레벨 변경 내역과 SCN값을 제공한다.
- 특정 스키마 내의 테이블에 수행한 select(조회) & DML 구문(10g에 추가된 기능)에 대해 감사한다.
- 컨텐츠를 기준으로 데이터 접근을 모니터링 할 수 있다.
- 제한된 감사 수행 : 정책을 통해 관리자는 감사기준이 되는 컬럼과 조건을 설정하면, 특정 DML구문 유형 또는 관리자가 지정한 특정 컬럼에 대해서만 감사 수행
- 감사 이벤트가 발생했을 때 호출할 루틴(PL/SQL 패키지 또는 프로시저)의 이름 지정 가능
FGA 정책 생성
- DBMS_FGA.ADD_POLICY 명령 사용
- 프로시저
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| object_schema | VARCHAR2 | FGA에서 설정하고자 하는 스키마명 |
| object_name | VARCHAR2 | FGA에서 설정하고자 하는 객체명(테이블, 뷰 이름) |
| policy_name | VARCHAR2 | FGA에서 설정하고자 하는 Policy명(Unique) |
| audit_condition | VARCHAR2 | 상세 감사 지정. 스키마 객체에 대한 논리적인 데이터 그룹에 상응하는 where 절 지정 ex) “department_id=10” 으로 지정 : 조회대상 객체에 AUDIT_CONDITION을 만족하는 데이터가 있다면, 명시적인 조건을 만족하지 않아도 Audit Trail은 생성된다. SELECT … FROM employees; ⇒ where 절에 조건 없이 전체를 조회하는 것 역시, AUDIT_CONDITION에 지정한 “department_id=10”인 데이터도 조회되므로 이 문장도 FGA의 대상이다. |
| audit_column | VARCHAR2 | 감사 대상이 되는 컬럼명 지정. 1개 이상의 컬럼 지정 가능(10g 추가 기능) |
| handler_schema handler_module | VARCHAR2 | FGA설정에 의해서 Audit Trail이 생성될 때 같이 실행될 수 있는 프로시저를 작성하는 경우, 프로시저의 스키마명과 프로시저명을 기술 프로시저 생성 패턴 : PROCEDURE <fname>(object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2) AS … |
| enable | BOOLEAN | FGA 기능 활성화 여부 지정. default가 TRUE임에도 불구하고 TRUE로 설정하지 않으면 FGA 설정이 활성화되지 않는다. |
| statement_types | VARCHAR2 | 10g 추가된 기능. FGA가 적용되는 문장 종류에 대해서 기술. INSERT, UPDATE, DELETE, SELECT(default) 중에서 지정하며, MERGE문은 내부적으로 INSERT 또는 UPDATE의 지정의 영향을 받음 |
| audit_trail | BINARY_INTEGER IN DEFAULT | 10g 추가된 기능. “AUDIT_TRAIL ⇒ DBMS_FGA.DB_EXTENDED”로 설정하는 경우 SYS.FGA_LOG$의 LSQLTEXT, LSQLBIND컬럼에 Audit Trail이 생성된다. |
| audit_trail_opts | BINARY_INTEGER IN DEFAULT | 10g 추가된 기능. 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정책 활성화
- 메타데이터 정보를 전혀 손실하지 않고도 임시로 FGA 정책의 활성화/비활성화 할 수 있다.
- DBMS_FGA.ENABLE_POLICY(활성화) / DBMS_FGA.DISABLE_POLICY(비활성화)
FGA정책 삭제
- 더 이상 정책이 필요하지 않을 경우 삭제 가능
- DBMS_FGA.DROP_POLICY 명령 사용
FGA DATA DICTIONARY VIEW
| VIEW NAME | DESCRIPTION |
|---|---|
| DBA_AUDIT_POLICIES | FGA 정책 설정에 대한 정보. ALL/DBA/USER_뷰가 모두 존재한다. |
| DBA_AUDIT_POLICY_COLUMN | FGA 정책 컬럼에 대한 정보. ALL/DBA/USER_뷰가 모두 존재한다. |
| DBA_FGA_AUDIT_TRAIL | FGA설정에 따른 AUDIT TRAIL 정보 |
| DBA_COMMON_AUDIT_TRAIL | DB 감사와 FGA 정보(통합적인 감사 정보) 확인 DBA_AUDIT_TRAIL, DBA_FGA_AUDIT_TRAIL의 UNION으로 구성 |
DBA_FGA_AUDIT_TRAIL
| 파라미터 | 설명 |
|---|---|
| TIMESTAMP | 감사 기록의 시간 |
| DB_USER | DB 사용자 이름 |
| OS_USER | OS 사용자 이름 |
| 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 | 정책이 존재하지 않거나 유효하지 않은 이벤트 핸들러를 참조 할 때 정책은 생성될 수 있으나, 감사 이벤트가 발생할 때 리턴하는 로우는 없다. |
- SELECT 문의 경우 FGA는 실제 행이 아니라 명령문 자체를 캡쳐합니다.
그러나 FGA가 Flashback Query와 결합된 경우 해당 시점에서 행이 존재하기 때문에 행이 재구성될 수 있습니다.
보안 패치 업데이트
- 오라클 DB와 OS 시스템 모두 최신의 보안 패치를 항상 적용한다.
- OTN보안 관련 페이지에서 공개된 보안 경고를 정기적으로 확인한다.
요약
- 오라클 설치 시 필요한 옵션만 선택적으로 설치한다.
- Default 사용자 관리를 철저히 한다.
- 관리자 & 일반 사용자 비밀번호 관리
- 데이터 사전 보호 활성화
- 최소 권한 부여
- SYSTEM & OBJECT 권한 수 확인
- DB에 SYS권한 접속 수 감소
- PUBLIC으로부터 불필요한 권한 회수
- 사용자에게 필요한 권한이 있는 ROLE을 부여
- 효과적인 액세스 제어
- 원격 클라이언트 사용자의 인증 : 서버가 인증 작업 수행
- OS 사용자 수 제한 : ORACLE_HOME 디렉토리와 그 하위의 파일 및 디렉토리 액세스 권한 제한
- 네트워크 • 액세스 제한
- 오라클 리스너의 부정한 변경 예방 : 리스너 원격 변경 불가로 설정
- 네트워크 IP 주소 확인 : 공격 가능성 있는 서비스 방해 예방. ORACLE NET의 “신뢰하는 노드 체크” 보안 기능 사용해 해당 IP가 오라클 서버 프로세스에 접근 허용
- 네트워크의 통신 패킷 암호화 : 클라이언트, DB와 애플리케이션 서버 간의 네트워크 통신 패킷 암호화
- OS 시스템 안전하게 한다 : 불필요한 OS 시스템 서비스를 비활성화해서 보안 강화
- 데이터의 암호화가 필요한 경우 TDE사용
- 보안 패치 적용과 보안 패치 업데이트
study/oracle/10gadmin/dbsecurity/onepage.txt · 마지막으로 수정됨: 저자 starlits



