PostgreSQL
audit 제품 비교
남용2
2019. 11. 8. 14:44
개요
PostgreSQL에서 사용되고 있는 audit 제품을 조사하고 비교한다.
audit
audit은 데이터베이스에서 발생하는 이벤트를 추적 및 기록한다.
비교 제품은 cyanAudit, pgAudit, pgMemento이다.
비교 제품
유지보수가 가능한지 등을 확인하기 위해 비교할 제품에 대해 몇 가지 확인한다.
cyanAudit | pgAudit | pgMemento | |
회사/커뮤니티 | 커뮤니티 | Crunchy Data | 커뮤니티 |
license | PostgreSQL License | PostgreSQL License | LGPL-3.0 |
first release | 12년 | 15년 12월 | 16년 5월 |
last release | 19년 4월, v2.2.1 | 18년 10월, v1.3.0 | 19년 3월, v0.6.1 |
contributors | - | 9 | 7 |
github star | - | 281 | 200 |
테스트된 OS | Linux |
Linux |
Linux |
PostgreSQL 지원 버전 | >= 9.6 | >= 9.5 | >= 9.5 |
문서 |
기능 비교표
audit 제품에서 제공하는 모든 기능을 나열한다.
기능명 | cyanAudit | pgAudit | pgMemento | 비고 |
구현 방식 | trigger 기반 | statement 기반 | trigger 기반 |
|
table audit | O | O | O |
|
column audit | O | O | O | |
세션에 대한 audit 활성화/비활성화 | O | O | X | |
세션 정보 | O | X | O |
|
audit log 검색 | O | X | O | |
audit log 형태 | table | postgresql log | table | |
DML audit log | O | O | O | |
DDL audit log | O | O | O | |
DCL audit log | X | O | X | |
label 설정 | O | X | X | |
audit log maintenance | O(cron) | X | O(function) | |
audit 데이터 백업 | O(cron) | X | X | |
audit 데이터 복구 | O | X | O | |
트랜잭션 되돌리기 | O(단일 테이블) | X | O(다중 테이블) |
호환성 테스트
기능상 차이
pgAudit 기능은 PostgreSQL 또는 AgensGraph에 따라 차이점이 있다. 차이점을 비교한 내용은 다음과 같다.
기능 |
설명 |
PostgreSQL | AgensGraph-SQL |
AgensGraph-Cypher |
pgaudit.log |
세션 감사 로깅 설정
|
O | O |
제한적으로 지원
|
pgaudit.role |
오브젝트 감사 로깅 설정
|
O | O |
제한적으로 지원
|
pgaudit.log_catalog | pg_catalog 조회시 세션 로깅 여부 | O | O | O |
pgaudit.log_client | psql과 같은 클라이언트에서 감사 로그 메시지를 볼 수 있는지 여부 | O | O | O |
pgaudit.log_level | 로그 레벨 설정 | O | O | O |
pgaudit.log_parameter | 명령문에 전달된 매개 변수 로깅 여부 | O | O | O |
pgaudit.log_relation | 세션 감사 로깅은 개별 로그 엔트리를 생성할지 여부 | O | O | O |
pgaudit.log_statement_once | 첫 질의에서만 출력 | O | O | O |
기능상 차이 테스트
기능 | 설명 | PostgreSQL | AgensGraph의 SQL |
SQL 예 |
AgensGraph의 Cypher |
Cypher 예 |
pgaudit.log | 세션 감사 로깅 설정 | O | O |
|
|
|
pgaudit.log_catalog | pg_catalog 조회시 세션 로깅 여부 | O | O |
|
O |
|
pgaudit.log_client | psql과 같은 클라이언트에서 감사 로그 메시지를 볼 수 있는지 여부 | O | O |
|
O |
|
pgaudit.log_level | 로그 레벨 설정 | O | O |
|
O |
|
pgaudit.log_parameter | 명령문에 전달된 매개 변수 로깅 여부 | O | O |
|
O |
|
pgaudit.log_relation | 세션 감사 로깅은 개별 로그 엔트리를 생성할지 여부 | O | O |
|
O |
|
pgaudit.log_statement_once | 첫 질의에서만 출력 | O | O |
|
O |
|
pgaudit.role | 오브젝트 감사 로깅 설정 | O | O |
|
|
|
pgAudit |
SQL |
Cypher |
기타 |
table audit |
|
안됨 |
|
column audit |
|
안됨 |
|
DML audit log | 가능 |
|
|
DDL audit log | 가능 |
|
|
DCL audit log | 가능 |
지원하지 않음 |
결과
- cypher와 호환되지 않는 기능들이 있다. 예를 들어, table log, column log이다.
- pgaudit.log 기능 중 일부가 제대로 작동하지 않는다. 예를 들어, pgaudit.log = 'read' 설정하고 match ... set ...하면 log가 보인다.
- audit output format 내용에 빈칸이 다수 존재한다.
- 이러한 문제가 발생하는 이유는 cypher를 제대로 파싱할 수 없기 때문이다.
audit output format 확인
Cypher | CLASS | COMMAND | OBJECT_TYPE | OBJECT_NAME |
SET | MISC | SET | - | - |
CREATE VLABEL | DDL |
CREATE SEQUENCE CREATE TABLE CREATE INDEX ALTER SEQUENCE COMMENT |
SEQUENCE TABLE INDEX SEQUENCE TABLE |
graph_00.stor_id_seq graph_00.stor graph_00.stor_pkey graph_00.stor_id_seq graph_00.stor |
CREATE ROLE | ROLE | CREATE ROLE | - | - |
SHOW | MISC | SET | - | - |
ALTER GRAPH | DDL | ALTER GRAPH | - | - |
REINDEX VLABEL | MISC | REINDEX | - | - |
COMMENT ON GRAPH | DDL | COMMENT | - | - |
ALTER VLABEL | DDL | ALTER VLABEL | TABLE | graph_00.v0 |
DROP VLABEL | WRITE | DELETE | - | - |
RETURN | READ | SELECT | - | - |
OPTIONAL MATCH | READ | SELECT | - | - |
MATCH ... DETACH DELETE | MISC | UNKNOWN | - | - |
MERGE | MISC | UNKNOWN | - | - |
CREATE FUNCTION | DDL | CREATE FUNCTION | FUNCTION | public.udf_var(pg_catalog.jsonb) |
DROP FUNCTION | DDL | DROP FUNCTION | FUNCTION | public.udf_var(pg_catalog.jsonb) |
CREATE PROPERTY INDEX | - | - | - | - |
MATCH...WITH... | READ | SELECT | - | - |