안녕하세요 Thinking Man 입니다.
이번 글에서는 SQL문을 감사(Audit)하는 방법에 대해 알아보도록 하겠습니다.
이번 글을 읽게 되면 여러 SQL 유형에 대해서 감사하는 방법을 알 수 있고 지정한 SQL 감사에 대해 감사 제거하는 방법에 대해서 알 수 있습니다.
이 글은 Oracle 11gR2 공식 문서를 참고하여 작성하였습니다.
표준 감사를 통한 활동 감사
SQL 문 감사 (SQL AUDIT)
SQL문 감사에서 다룰 내용은 아래와 같습니다.
- SQL 문장 감사란
- SQL 감사 유형
- SQL 문장 감사 구성
- SQL 문장 감사 제거
SQL 문장 감사란
SQL 문장 감사는 특정 유형의 DB 객체(TABLE, VIEW)에 대한 SQL 문장을 감사하거나 특정 스키마(scott, system)를 선택하여 SQL 문장을 감사하는 것을 말합니다.
SQL 감사 유형
감사할 수 있는 SQL 문은 아래와 같습니다
- DDL 문. 예로 “AUDIT TABLE”은 모든 CREATE 문장과 DROP TABLE 문장을 감사합니다.
- DML 문. 예로 “AUDIT SELECT TABLE”은 TABLE과 VIEW까지 감사 대상에 포함되고 모든 TABLE과 VIEW를 조회하는 SELECT 문장을 감사합니다.
SQL 문장 감사는 범위를 크게 수행할 수 도 있고 범위를 좁혀 특정 문장에 중점을 둘 수도 있습니다.
모든 데이터베이스 사용자의 활동을 감사할 수 있고 지정된 활동 목록만 감사하는 방식으로 설정할 수도 있습니다.
SQL 문장 감사 구성
SQL 문장 감사를 구성하려면 AUDIT 문을 사용해야 하며 감사를 활성화 하고자 하는 계정에 AUDIT SYSTEM 시스템 권한이 필요합니다.
일반적으로 보안 관리자만이 이 시스템 권한을 부여 받을 것입니다.
아래 예제는 모든 TABLE 및 VIEW를 SELECT 하는 SQL 문장을 감사하는 방법입니다.
예제) AUDIT를 사용하여 SQL 문장 감사 활성화
AUDIT SELECT TABLE BY ACCESS;
아래 예제에서는 모든 테이블에 대한 SELECT, INSERT, DELETE 문에 대해 감사하는데 대상은 모든 사용자이고 성공 여부는 실패한 문장을 감사하는 명령어입니다.
예제) 실패한 문장 감사
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
모든 SQL 문장, 개별 사용자의 감사 및 존재하지 않는 객체에 대한 감사 방법은 아래의 내용을 참조하시기 바랍니다.
개별 사용자의 모든 SQL 문장을 감사
모든 SQL 문장을 감사하려면 ALL STATEMENTS 절을 사용하여 Top-Level SQL 문장을 감사합니다. 이 ALL STATEMENTS 절의 동작은 다른 문장 감사 옵션과 다르게 SQL 문장이 PL/SQL 내에서 수행되는 경우 감사하지 않습니다. PL/SQL 프로시저나 함수 수행 자체는 감사합니다. 이 감사 옵션은 이미 설정한 다른 AUDIT 옵션에 영향을 미치지 않습니다. 이 옵션은 시스템 전체 또는 사용자별 다른 감사 구성에 관계없이 특정 환경의 모든 명령문을 감사하려는 경우에 유용합니다.
예제) 사용자 thinkingman 및 thinker가 수행한 성공한 모든 문장을 감사하려면 아래와 같이 수행
AUDIT ALL STATEMENTS BY thinkingman, thinker BY ACCESS WHENEVER SUCCESSFUL;
개별 사용자가 수행한 모든 SQL 문장을 감사
Oracle Database SQL Language Reference 에 SQL 감사 옵션 List가 있는데 이 List Table 13-1의 모든 SQL 문장을 감사하려면 ALL 절을 사용해야 합니다.
예제) 사용자 thinker의 SQL 감사 옵션 List 모든 문장을 감사하려면 아래와 같이 수행
AUDIT ALL BY thinker BY ACCESS;
현재 세션의 사용자와 관계없이 모든 SQL 문장을 감사
ALL STATEMENTS 감사 옵션에 IN SESSION CURRENT 절을 사용하여 사용자 세션이 종료될 때까지 Top-Level SQL 문장을 감사합니다. 특정 사용자에 대한 IN SESSION CURRENT 절은 사용할 수 없습니다. NOAUDIT 문을 사용하여 이 감사를 취소할 수 없으며 감사는 사용자 세션이 종료될 때까지 지속됩니다. 사용자가 세션을 종료하면 감사도 종료됩니다.
예제) 현재 사용자 세션에서 실패한 모든 문장을 감사하려면 다음과 같이 입력
AUDIT ALL STATEMENTS IN SESSION CURRENT BY ACCESS WHENEVER NOT SUCCESSFUL;
데이터베이스 로그온 트리거에서 IN SESSION CURRENT 절과 함께 AUDIT ALL STATEMENTS 감사 옵션을 사용할 수 있습니다. 데이터베이스 로그온 트리거는 SYS_CONTEXT 함수를 사용하여 특정 조건에 맞는 감사를 설정할 수 있습니다. 예를 들어 6:30 p.m.에서 9:00 a.m. 사이에 로그온하는 사용자만 감사하도록 구성할 수 있습니다. 이를 통해 비근무 시간 동안 데이터베이스에 로그온하는 사용자가 수행하는 SQL 문장을 캡처할 수 있습니다.
이러한 종류의 감사는 이 연결이 안전하지 않을 수 있거나 내부 위협을 제공할 수 있는 경우 감사 활동의 수집을 늘리는 데 유용합니다. 예를 들어 데이터베이스 로그온 트리거를 사용하면 SYS_CONTEXT 함수를 사용하여 연결 컨텍스트의 내용을 쿼리할 수 있으며, 이를 통해 이 연결을 더 완전히 감사해야 하는지 여부를 확인할 수 있습니다.
다음 SQL 명령을 입력하여 이러한 종류의 감사를 설정합니다:
예제) 현재 사용자 세션에서 실패, 성공 모든 문장을 감사
AUDIT ALL STATEMENTS IN SESSION CURRENT;
이러한 종류의 감사는이 세션이 종료될 때까지 계속 유지됩니다.
로그인 및 로그오프 연결 및 연결 해제를 감사
AUDIT SESSION 문은 각 로그인 및 로그오프 이벤트에 대한 독립적인 감사 레코드를 생성합니다. 이로 인해 사용자와 상관없이 데이터베이스로의 모든 성공적인 연결과 실패한 연결 및 데이터베이스에서의 로그오프를 감사할 수 있습니다.
예제)
AUDIT SESSION BY ACCESS;
이 옵션을 개별 사용자에게 선택적으로 설정할 수도 있습니다.
AUDIT SESSION BY thinkingman, thinker BY ACCESS;
객체가 존재하지 않아 실패하는 모든 SQL 문장을 감사
AUDIT 문의 NOT EXISTS 옵션은 대상 객체가 존재하지 않아 실패하는 모든 SQL 문장을 감사하도록 설정합니다.
예제)
AUDIT NOT EXISTS;
상세한 정보는 Oracle Database SQL Language Reference를 참조하십시오.
SQL 문장 감사 제거
SQL 문장 감사를 제거하려면 NOAUDIT SQL 문을 사용합니다. (권한 감사는 여전히 활성화됩니다.) SQL 문장 감사를 제거하려면 AUDIT SYSTEM 시스템 권한이 필요합니다. AUDIT ALL STATEMENTS 옵션을 구성한 경우 NOAUDIT AUDIT STATEMENTS 문을 발행해도 설정한 다른 감사 옵션에 영향을 미치지 않습니다. AUDIT 문에 IN SESSION CURRENT 절을 포함한 경우 NOAUDIT 문을 사용하여 이 AUDIT 문을 제거할 수 없습니다. (사용자 세션이 종료될 때 감사 설정이 종료됩니다.)
아래 예제는 감사를 제거하기 위해 NOAUDIT 문을 사용하는 방법입니다.
예제) NOAUDIT를 사용하여 세션 및 SQL 문장 감사 제거
NOAUDIT session; NOAUDIT session BY thinkingman, thinker; NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE;
아래 예제는 NOAUDIT 문을 사용하여 모든 문장 감사를 제거하는 방법을 보여줍니다.
예제) NOAUDIT를 사용하여 ALL STATEMENTS 감사 제거
NOAUDIT ALL STATEMENTS;
같이 읽으면 좋은 글
> Oracle 보안 관리 Audit 6편 (Audit 명령문)
> Oracle 보안 관리 Audit 5편 (UNIX SYSLOG Audit)
> Oracle 보안 관리 Audit 4편 (OS Audit Trail 2)
1 thought on “Oracle 보안 관리 Audit 7편 (SQL Audit)”
Comments are closed.