• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 1. 일반적인 보안 문제
    2. MySQL 권한 시스템
    3. MySQL 사용자 계정 관리
    1. 사용자 이름과 암호
    2. 사용자 계정 추가
    3. 사용자 계정 삭제
    4. 계정 자원 제한 설정
    5. 계정 암호 지정
    6. 암호 만료 및 샌드 박스 모드
    7. 플러그 인증
    8. MySQL에서 사용 가능한 인증 플러그인
    9. 프록시 사용자
    10. 보안 연결을 위해 SSL 사용
    11. SSH를 사용하여 Windows에서 MySQL에 대한 원격 연결
    12. MySQL Enterprise Audit 로그 플러그인
    1. 감사 로그 플러그인 설치
    2. 감사 로그 플러그인의 보안 고려 사항
    3. 감사 로그 파일
    4. 감사 로그 플러그인의 로깅 제어
    5. 감사 로그 플러그인 옵션 및 변수의 참조
    6. 감사 로그 플러그인 옵션 및 시스템 변수
    7. 감사 로그 플러그인의 상태 변수
    8. 감사 로그 플러그인의 제한 사항
    13. SQL 기반의 MySQL 계정 활동 감사
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

6.3.12.4 감사 로그 플러그인의 로깅 제어

이 섹션에서는 audit_log 플러그인에서 로깅을 수행하는 방법 및 로깅 발생 방법을 제어하는 시스템 변수에 대해 설명합니다. 섹션 6.3.12.3 "감사 로그 파일" 에 설명 된 로그 파일 형식을 잘 알고있는 것이 전제가되고 있습니다.

감사 로그 플러그인은 로그 파일을 열면 XML 선언 및 시작 루트 요소 태그 <AUDIT> 을 쓸 필요가 있는지 여부를 확인하고 그 경우 그 태그를 씁니다. 감사 로그 플러그인이 종료하면 종료 태그 </AUDIT> 를 파일에 기록합니다.

로그 파일을 열 때 존재하면 플러그인 파일이 </AUDIT> 태그로 종료 여부를 확인하고 그 경우는 그것을 절단 한 다음 모든 <AUDIT_RECORD> 요소를 씁니다. 로그 파일이 존재하지만, </AUDIT> 태그에서 종료하지 않거나 </AUDIT> 태그를자를 수없는 경우 플러그인은 파일 형식을 부정하고, 초기화에 실패했다고 간주 합니다. 이것은 서버가 충돌 한 경우 나, 감사 로그 플러그인 실행 중에 강제 종료 된 경우에 발생할 수 있습니다. 로깅은 문제가 해결 될 때까지 발생하지 않습니다. 오류 로그를 확인하고 진단 정보를 확인하십시오.

 [ERROR] Plugin 'audit_log'init function returned error.

이 문제를 해결하려면 잘못된 형식의 로그 파일을 삭제하거나 파일 이름을 변경 한 후 서버를 다시 시작해야합니다.

MySQL 서버는 클라이언트로부터 수신 된 SQL 문 실행이 완료 될 때 등 감사 가능한 이벤트가 발생할 때마다 감사 로그 플러그인을 호출하여 <AUDIT_RECORD> 요소를 씁니다. 일반적으로 서버 시작 후 처음으로 기록 된 <AUDIT_RECORD> 요소는 서버의 설명 및 부팅 옵션이 포함되어 있습니다. 그 나머지의 요소는 클라이언트 연결 및 분리 이벤트 SQL 문 실행 등의 이벤트를 나타냅니다. 최상위 문만이 기록 된 트리거 및 저장 프로 시저 등의 저장 프로그램에서 명령문의 로그가 기록되지 않습니다. LOAD DATA INFILE 과 같은 명령문에서 참조되는 파일의 내용은 기록되지 않습니다.

로깅의 발생 방법에 대한 제어를 허용하기 위해 audit_log 플러그인은 다음에 설명하는 같은 여러 시스템 변수가 준비되어 있습니다. 자세한 내용은 섹션 6.3.12.6 "감사 로그 플러그인 옵션 및 시스템 변수" 를 참조하십시오.

감사 로그 파일 이름 지정

감사 로그 파일 이름을 제어하려면 서버를 시작할 때 audit_log_file 시스템 변수를 설정합니다. 기본적으로 서버의 데이터 디렉토리의 audit.log 라고합니다. 보안상의 이유로 감사 로그 파일은 MySQL 서버 및 로그를 표시하는 정당한 이유를 가진 사용자 만 액세스 할 수있는 디렉토리에 저장해야합니다.

감사 로깅 전략

감사 플러그인은 로그 기록에 관한 여러 전략 중 하나를 사용할 수 있습니다. 전략을 지정하려면 서버를 시작할 때 audit_log_strategy 시스템 변수를 설정합니다. 기본적으로 전략 값은 ASYNCHRONOUS 이며, 플러그인은 비동기 적으로 로그 버퍼에 기록하고 버퍼가 꽉 차면 대기합니다. 파일 시스템 캐싱을 사용하거나 ( SEMISYNCHRONOUS ) 각 쓰기 요청 후에 sync() 를 호출하여 출력을 강제하면 ( SYNCHRONOUS ) 대기하지 않도록 ( PERFORMANCE ) 또는 동 기적으로 기록하기 같은 플러그인에 지시 할 수 있습니다.

비동기 로깅 전략에는 다음과 같은 특성이 있습니다.

  • 서버의 성능과 확장성에 대한 영향을 최소화합니다.

  • 가능한 한 최단 시간 (즉, 버퍼를 할당 시간과 버퍼에 이벤트를 복사하는 시간을 더한 시간)에서 감사 이벤트를 생성하는 스레드를 차단합니다.

  • 출력은 버퍼에 기록됩니다. 별도의 스레드가 버퍼에서 로그 파일에 기록을 해결할 수 있습니다.

PERFORMANCE 전략의 단점은 버퍼가 가득 찬 경우 이벤트가 취소되는 점입니다. 부하가 높은 서버는 감사 로그에 이벤트가 누락 될 가능성이 높아집니다.

비동기 로깅을 사용하면 파일에 기록 문제가 발생했을 경우 나 플러그인이 정상적으로 종료되지 않는 경우 (예를 들어, 서버 호스트가 충돌 한 경우)에 로그 파일의 무결성이 위험에 노출 될 수 성이 있습니다. 이러한 위험을 줄이기 위해 동기화 로깅이 사용되도록 audit_log_strategy 을 설정합니다. 전략에 관계없이 로깅은 최선형 베이시스에서 발생하기 때문에 일관성이 보장되지 않습니다.

감사 로그 영역 관리

감사 로그 플러그인에 해당 로그 파일에 사용되는 공간을 관리 할 수​​있는 여러 시스템 변수가 준비되어 있습니다.

  • audit_log_buffer_size : 비동기 기록을위한 버퍼 크기를 설정하려면이 변수를 서버 시작시에 설정합니다. 이 플러그인은 초기화시에 할당 종료시 삭제되는 단일 버퍼가 사용됩니다. 이 플러그인은 로깅이 비동기 경우에만이 버퍼를 할당합니다.

  • audit_log_rotate_on_size , audit_log_flush :이 변수를 사용하여 감사 로그 파일 회전 및 플래시가 허용됩니다. 감사 로그 파일이 매우 커져 많은 양의 디스크 공간이 소모 될 수 있습니다. 사용되는 영역을 관리하려면 자동 로그 회전을 사용하거나 수동으로 감사 파일의 이름을 변경하고 로그를 플러시하여 새 파일을 엽니 다. 필요에 따라 이름이 변경된 파일을 삭제하거나 백업 할 수 있습니다.

    기본적으로 audit_log_rotate_on_size=0 이며, 로그 회전은 발생하지 않습니다. 이 경우 audit_log_flush 값이 무효로부터 유효하게 변경되면 감사 로그 플러그인은 로그 파일을 닫았다가 다시 엽니 다. 로그 파일 이름의 변경은 서버 외부에서 실행해야합니다. 이름을 audit.log.1 에서 audit.log.3 에서 순환시키는 3 가지 최근의 로그 파일을 유지한다고 가정합니다. Unix에서 다음과 같이 수동으로 회전을 수행합니다.

    1. 명령 행에서 현재 로그 파일 이름을 변경합니다.

       shell> mv audit.log.2 audit.log.3
       shell> mv audit.log.1 audit.log.2
       shell> mv audit.log audit.log.1
      

      이 시점에서 플러그인은 이어 audit.log.1 에 이름이 변경된 현재 로그 파일에 기록합니다.

    2. 서버에 연결하여 로그 파일을 플래시합니다. 그러면 플러그인은 로그 파일을 닫고 새 audit.log 파일 로그를 다시 엽니 다.

       mysql> SET GLOBAL audit_log_flush = ON;
      

    audit_log_rotate_on_size 가 0보다 큰 경우 audit_log_flush 을 설정해도 효과가 없습니다. 이 경우 파일에 쓰기에 의해 그 크기가 audit_log_rotate_on_size 값을 초과 할 때마다 감사 로그 플러그인은 로그 파일을 닫았다가 다시 엽니 다. 이 플러그인은 타임 스탬프 확장자가 추가되도록 원래의 파일 이름을 변경합니다. 예를 들어, audit.log 는 audit.log.13440033615657730 라는 변경 될 수 있습니다. 마지막 7 자리는 소수입니다. 처음 10 자리는 FROM_UNIXTIME() 함수를 사용하여 해석 할 수있는 Unix 타임 스탬프 값입니다.

    mysql> SELECT FROM_UNIXTIME(1344003361);
    +---------------------------+
    | FROM_UNIXTIME(1344003361) |
    +---------------------------+
    | 2012-08-03 09:16:01       |
    +---------------------------+
    
감사 로그 필터링

감사 로그 플러그인은 감사 이벤트를 필터링 할 수 있습니다. 그러면 이벤트의 발생원의 계정 및 이벤트 상태에 따라 감사 로그 파일에 이벤트를 기록할지 여부를 제어 할 수 있습니다. 상태 필터링은 연결 이벤트 및 문 이벤트에 대해 개별적으로 발생합니다.

계정 별 이벤트 필터링

MySQL 5.6.20 시점에서 발생원의 계정에 따라 감사 이벤트를 필터링하려면 서버 시작시 또는 실행시에 다음 시스템 변수 중 하나를 설정합니다.

  • audit_log_include_accounts : 감사 기록에 포함 계정. 이 변수가 설정되어있는 경우 이러한 계정 만 감사합니다.

  • audit_log_exclude_accounts : 감사 로깅에서 제외 계정. 이 변수가 설정되어있는 경우 이러한 계정을 제외한 모든 감사됩니다.

하나의 변수의 값은 NULL 또는 쉼표로 구분 된 하나 이상의 계정 이름을 포함하는 문자열을 지정할 수 있습니다. 각각의 형식은 user_name @ host_name 입니다. 기본적으로 두 변수가 NULL 되어 있습니다. 이 경우 계정의 필터링은 실행되지 않고 모든 계정에서 감사가 발생합니다.

예 : user1 과 user2 로컬 호스트의 계정에서만 감사 로깅을 활성화하려면 다음과 같이 audit_log_include_accounts 시스템 변수를 설정합니다.

 SET GLOBAL audit_log_include_accounts = 'user1 @ localhost, user2 @ localhost';

동시에 NULL 이외로 설정할 수는 audit_log_include_accounts 과 audit_log_exclude_accounts 중 하나뿐입니다.

  • audit_log_include_accounts 을 설정하면 서버는 audit_log_exclude_accounts 를 NULL 로 설정합니다.

  • audit_log_include_accounts 가 NULL 이 아닌 경우를 제외하고 audit_log_exclude_accounts 을 설정하려고하면 오류가 발생합니다. 이 경우 먼저 audit_log_include_accounts 를 NULL 로 설정하여 클리어해야합니다.

 - This sets audit_log_exclude_accounts to NULL
 SET GLOBAL audit_log_include_accounts = value ;

 - This fails because audit_log_include_accounts is not NULL
 SET GLOBAL audit_log_exclude_accounts = value ;

 - To set audit_log_exclude_accounts, first set
 - audit_log_include_accounts to NULL
 SET GLOBAL audit_log_include_accounts = NULL;
 SET GLOBAL audit_log_exclude_accounts = value ;

하나의 변수의 값을 조사하려면 SHOW VARIABLES 로 NULL 이 빈 문자열로 표시되는 것에주의하십시오. 이 문제를 해결하려면 대신 SELECT 를 사용하십시오.

mysql> SHOW VARIABLES LIKE 'audit_log_include_accounts';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| audit_log_include_accounts |       |
+----------------------------+-------+
mysql> SELECT @@audit_log_include_accounts;
+------------------------------+
| @@audit_log_include_accounts |
+------------------------------+
| NULL                         |
+------------------------------+

쉼표 나 공백 또는 기타 특수 문자가 포함되어 있기 때문에 사용자 이름과 호스트 이름을 따옴표로 묶어야 있으면 작은 따옴표를 사용하여 묶습니다. 변수의 값 자체가 작은 따옴표로 둘러싸여있는 경우, 내부의 각 작은 따옴표를 이중으로 입력하거나 백 슬래시를 사용하여 이스케이프합니다. 다음 문은 각각 로컬 root 계정 감사 로깅을 사용합니다. 따옴표 스타일이 다르지만 모두 동일합니다.

 SET GLOBAL audit_log_include_accounts = 'root @ localhost';
 SET GLOBAL audit_log_include_accounts = '' 'root'@ 'localhost' '';
 SET GLOBAL audit_log_include_accounts = '\'root \ '@ \'localhost \ '';
 SET GLOBAL audit_log_include_accounts = " 'root'@ 'localhost'";

ANSI_QUOTES SQL 모드에서는 큰 따옴표는 문자열의 인용이 아닌 식별자 지수를 나타 내기 때문에이 모드가 활성화되어있는 경우에는 마지막 문이 작동하지 않습니다.

상태 별 이벤트 필터링

MySQL 5.6.20의 시점에서, 상태에 따라 감사 이벤트를 필터링하려면 서버 시작시 또는 실행시에 다음의 시스템 변수를 설정합니다.

  • audit_log_connection_policy : 연결 이벤트의 로깅 정책입니다

  • audit_log_statement_policy : 문 이벤트 로깅 정책입니다

각 변수는 ALL (관련된 모든 이벤트를 기록합니다. 이것이 기본값입니다) ERRORS (실패한 이벤트 로그 만 기록합니다) 또는 NONE (이벤트 로그를 기록하지 않습니다) 값이 지정됩니다. 예를 들어, 문 이벤트 로그는 모든 기록, 접속 로그 이벤트는 실패한 것만을 기록하려면 다음 설정을 사용합니다.

 SET GLOBAL audit_log_statement_policy = ALL;
 SET GLOBAL audit_log_connection_policy = ERRORS;

MySQL 5.6.20 이전에는 audit_log_connection_policy 및 audit_log_statement_policy 을 사용할 수 없습니다. 대신 서버 시작시 또는 실행시 audit_log_policy 을 사용합니다. 여기에는 ALL (모든 이벤트를 기록합니다. 이것이 기본값입니다) LOGINS (연결 이벤트를 기록합니다) QUERIES (문 이벤트를 기록합니다) 또는 NONE (이벤트 로그를 기록하지 않습니다) 값이 지정됩니다. 이러한 값 중 하나를 지정해서 감사 로그 플러그인은 성공과 실패를 구분하지 않고 선택한 이벤트 로그를 기록합니다.

MySQL 5.6.20 시점에서 audit_log_policy 는 계속 사용 가능하지만, 서버가 시작될 때만 설정할 수 없습니다. 실행시 읽기 전용 변수입니다. 시작할 때 사용하면 다음과 같이 작동합니다.

  • audit_log_policy 을 설정하지 않거나 기본값 ALL 로 설정 한 경우에도 audit_log_connection_policy 또는 audit_log_statement_policy 를 명시 적으로 설정하면 지정한대로 적용됩니다. 지정하지 않으면 기본값이 ALL 로 설정됩니다.

  • audit_log_policy 을 ALL 이외의 값으로 설정하면 다음 표와 같이 그 값이 우선되어 audit_log_connection_policy 및 audit_log_statement_policy 을 설정하는 데 사용됩니다. 또한 이러한 변수 중 하나를 기본 ALL 이외의 값으로 설정하는 경우, 서버는 그 값이 재정의되고 있음을 나타내는 메시지를 오류 로그에 기록합니다.

    시작 audit_log_policy 값 결과로 반환되는 audit_log_connection_policy 값 결과로 반환되는 audit_log_statement_policy 값
    LOGINS ALL NONE
    QUERIES NONE ALL
    NONE NONE NONE
이벤트 필터링 보고서

다음 상태 변수의 값을 조사하면 필터링 결과를 확인할 수 있습니다.

  • Audit_log_events : 필터링 정책에 따라 로그에 기록되었는지 여부에 관계없이 감사 로그 플러그인에 의해 처리 된 이벤트 수.

  • Audit_log_events_filtered : 필터링 정책에 따라 감사 로그 플러그인에 의해 필터링 된 (로그에 기록되지 않은) 이벤트의 수.

  • Audit_log_events_written : 감사 로그에 기록 된 이벤트의 수.

MySQL 5.6.20 시점에서는 이러한 변수를 사용할 수 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved