-
audit 제품 비교PostgreSQL 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'` 가 적용되지 않는다.
- 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 - - 'PostgreSQL' 카테고리의 다른 글
PostgreSQL 백업 및 복구 - 명령어 사용 (0) 2019.11.22 대기업 PostgreSQL DBA 면접 후기 (1) 2019.11.22 PostgreSQL HA 도구 비교 (0) 2019.10.14 stolon 설치 (0) 2019.10.14 patroni 설치 (0) 2019.10.14