AUDIT
AUDIT#
구문#
audit ::=#
audit_operation_clause ::=#
by_clause ::=#
audit_object_clause ::=#
ddl_clause ::=#
전제 조건#
SYS 사용자만이 이 구문으로 감사 조건을 설정할 수 있다.
설명#
Altibase 서버 내에서 실행되고 있는 특정 구문 또는 모든 구문을 실시간으로 추적하고, 로그를 남기는 것을 감사(Audit)라고 한다. 이 구문을 사용해서 감사 조건을 설정할 수 있다.
audit_operation_clause#
이 절은 Altibase 서버에서 특정한 SQL 구문이 수행되는 것을 감사하도록 지정한다.
이 절의 sql_statement_type에는 감사 대상 작업을 지정한다. 콤마(,)로 연결해서 여러 개를 명시할 수도 있다. 지정 가능한 감사 작업은 다음과 같다.
- SELECT
- INSERT
- UPDATE
- DELETE
- MOVE
- MERGE
- ENQUEUE
- DEQUEUE
- LOCK
- EXEC or EXECUTE
- COMMIT
- ROLLBACK
- SAVEPOINT
- CONNECT
- DISCONNECT
- ALTER SESSION
- ALTER SYSTEM
ALL은 위에 나열한 모든 구문에 대해 감사할 것을 지정한다.
by_clause#
특정 사용자가 실행하는 구문을 감사할 것을 지정한다.
audit_object_clause#
이 절은 Altibase 서버에서 특정 객체에 대해 특정한 작업이 수행되는 것을 감사하도록 지정한다.
이 절에는 감사 대상 작업을 콤마(,)로 연결해서 명시할 수 있다. 아래는 감사 대상이 될 수 있는 작업 별로 지정 가능한 객체의 종류와, 각 경우에 감사 내역은 무엇인지를 나타낸 표이다.
작업 | 객체 종류 | 감사 내역 |
---|---|---|
SELECT | TABLE | 대상 테이블 객체에 수행되는 SELECT 구문 |
INSERT | TABLE | 대상 테이블 객체에 수행되는 INSERT 구문 |
UPDATE | TABLE | 대상 테이블 객체에 수행되는 UPDATE 구문 |
DELETE | TABLE | 대상 테이블 객체에 수행되는 DELETE 구문 |
MOVE | TABLE | 대상 테이블 객체에 수행되는 MOVE 구문 |
MERGE | TABLE | 대상 테이블 객체에 수행되는 MERGE 구문 |
ENQUEUE | QUEUE | 대상 큐 객체에 수행되는 ENQUEUE 구문 |
DEQUEUE | QUEUE | 대상 큐 객체에 수행되는 DEQUEUE 구문 |
LOCK | TABLE | 대상 테이블 객체에 수행되는 LOCK 구문 |
EXEC/EXECUTE | PROCEDURE | 대상 프로시저 객체를 실행하는 구문 |
ALL은 객체 유형에 대해서 수행 가능한 모든 SQL 구문을 감사할 것을 지정한다. 단, 위의 표에 나열한 구문에 한해서이다.
object_name#
감사 대상이 되는 객체 이름을 명시한다. 지정할 수 있는 객체의 종류는 테이블, 뷰, 큐, 시퀀스, 저장 프로시저 및 저장 함수이다.
ddl_clause#
이 절은 Altibase 서버에서 DDL 구문이 수행되는 것을 감사하도록 지정한다.
BY ACCESS | SESSION#
BY ACCESS를 지정하면 조건에 부합하는 구문 또는 작업에 대해 각각 하나의 감사 로그가 기록된다. 예를 들어 BY ACCESS를 지정하여 감사를 진행하면 한 세션에서 동일한 SQL 구문이 10회 실행된 경우 감사 로그도 10개가 기록된다.
BY SESSION은 1 prepare - n execute 구조에서 중복 로그를 방지하기 위해 하나의 감사 로그만 기록된다. 또한 마지막에 수행된 구문의 통계 로그는 해당 구문이 종료되는 시점에 기록된다.
둘 중 하나도 지정하지 않으면 BY SESSION이 디폴트이다.
감사 대상이 CONNECT, DISCONNECT, DDL 경우에는 BY ACCESS|SESSION을 지원하지 않는다.
WHENEVER [NOT] SUCCESSFUL#
WHENEVER SUCCESSFUL을 지정하면 성공하는 SQL구문과 작업만 감사한다.
WHENEVER NOT SUCCESSFUL을 지정하면 실패하는 SQL구문과 작업만 감사한다.
이 절을 생략하면 Altibase는 성공이나 실패에 상관없이 감사를 수행한다.
'BY SESSION WHENEVER SUCCESSFUL'로 지정한 경우, 한 세션에서 수행된 동일한 SQL 구문들이 모두 성공적으로 수행되는 경우에만 그 구문에 대한 로그가 기록된다.
'BY SESSION WHENEVER NOT SUCCESSFUL'로 지정한 경우, 한 세션에서 수행되는 동일한 SQL 구문들 중 하나라도 실패할 경우에 그 구문에 대한 로그가 기록된다.
주의 사항#
AUDIT 구문으로 감사 조건을 설정하여도, 서버의 감사 작업에 새로운 조건들이 바로 적용되는 것은 아니다. 운영 중인 서버에 새로운 감사 조건들이 적용되기 위해서는 아래의 구문을 사용해서 감사를 재시작하거나 감사 조건들을 RELOAD해야 한다.
ALTER SYSTEM STOP AUDIT;
ALTER SYSTEM START AUDIT;
ALTER SYSTEM RELOAD AUDIT;
예제#
<질의1> 사용자 user1의 friends 테이블에 대한 INSERT, UPDATE 또는 DELETE문 수행 중 실패한 경우에 대한 정보를 모두 기록하라.
iSQL> AUDIT insert, update, delete ON user1.friends BY ACCESS WHENEVER NOT
SUCCESSFUL;
<질의2> 사용자 user1의 friends 테이블에 대한 DDL문 수행들이 세션에서 모두 성공한 경우에 로그를 기록하라.
iSQL> AUDIT all ON user1.friends BY SESSION WHENEVER SUCCESSFUL;
<질의3> Altibase 서버에 대해 수행되는 모든 CONNECT, DISCONNECT 구문의 실패 정보를 기록하라.
iSQL> AUDIT connect, disconnect WHENEVER NOT SUCCESSFUL;
Audit success.
<질의4> Altibase 서버 내에서 수행되는 모든 INSERT 구문에 대한 정보를 세션 단위로 기록하라.
iSQL> AUDIT insert;
Audit success.
<질의5> 사용자 user1이 수행하는 모든 DDL 구문에 대한 로그를 기록하라.
iSQL> AUDIT DDL BY user1;
Audit success.