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 기반
  • 그래프 라벨에 trigger 불가
table audit O O O

 

column audit O O O  
세션에 대한 audit 활성화/비활성화 O O X  
세션 정보 O X O
  • pgAudit
    • 가능하도록 설정(link)
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

세션 감사 로깅 설정

  • READ: SELECT, COPY TO
  • WRITE: INSERT, UPDATE, DELETE, TRUNCATE, COPY FROM
  • FUNCTION
  • ROLE: GRANT, REVOKE, CREATE/ALTER/DROP ROLE
  • DDL: ROLE 클래스에 포함되지 않은 DDL
  • MISC: 기타
  • ALL: 모두
O O

제한적으로 지원

  • READ: 부분 지원(SELECT 지원)
  • WRITE: 미지원
  • FUNCTION: 지원
  • ROLE: 부분 지원(CREATE/ALTER/DROP ROLE 지원)
  • DDL: 부분 지원(ALTER DATABASE, ALTER GRAPH, ALTER VLABEL 지원)
  • MISC: 지원
  • ALL: 지원
pgaudit.role

오브젝트 감사 로깅 설정

  • TABLE: SELECT, INSERT, UPDATE, DELETE 등
  • COLUMN: 컬럼 단위 권한
O O

제한적으로 지원

  • TABLE: 부분 지원(SELECT 지원)
  • COLUMN: 미지원
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

 

  • read 가능
  • write 불가능(MISC로 출력가능)

 

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

 

  • match 가능
  • match..set 불가능
  • vertex의 property에 감사 로깅 불가(properties 컬럼 가능)
  • 추가 테스트 필요

 

 

 

pgAudit

SQL

Cypher

기타
table audit

 

안됨

  • Cypher
    • audit이 다 보임
      • MATCH...SET 절은 SELECT...UPDATE에 해당하지만 MATCH가 SELECT되어 `pgaudit.log = 'read'` 가 적용되지 않는다.

 

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 - -