ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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'` 가 적용되지 않는다.

     

    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
Designed by Tistory.