미스터 역마살

Mysql Audit Log 본문

Database/MYSQL

Mysql Audit Log

Mr. YeokMaSsal 2022. 8. 3. 18:05
728x90
반응형

Audit Log란?

Audit(감사) Log란 보안상 특정 이슈로 어떤 사용자의 행위를 확인하고 싶을때 설정하는 로그로써 접속, 쿼리 등 모든 정보를 로깅할 수 있다.

Mysql Enterprise 버전에는 기본으로 Audit Plugin이 들어있어 설치이후 로깅을 시작하면 되고, Community버전은 Mariadb의 audit plugin을 받아 설치하여야 한다.

 

Audit Log 설정

AUDIT 설치

/*================================================================================
 * Audit Plugin이 설치 되어있는지 확인
 *================================================================================ */
SELECT PLUGIN_NAME
     , PLUGIN_STATUS
  FROM information_schema.PLUGINS 
 WHERE PLUGIN_NAME LIKE '%audit%'
 ;
 
show variables like '%audit%';




/*================================================================================
 * Audit Plugin 설치 (터미널에서 할것)
 *================================================================================ */
-- Percona
Install PLUGIN audit_log SONAME ='audit_log.so';

-- Maria db
Install PLUGIN audit_log SONAME = 'server_audit.so';


-- 설치후 확인
show variables like '%audit%';

 

Audit 설정

/*================================================================================
 * audit_log_connection_policy 옵션
 * -> 접속정보 감사
 *  - ALL : 모든 접속정보 기록
 *  - ERRORS : 접속에러 사항만 기록
 *  - NONE : 기록하지 않음
 *================================================================================ */
SET GLOBAL audit_log_connection_policy=ALL;



/*================================================================================
 * audit_log_exclude_accounts 옵션
 * -> 로그 정보를 남기지 않을 유저 설정 (설정 이후 생긴 Connection에만 유효함)
 *================================================================================ */
-- Mysql 
SET GLOBAL audit_log_exclude_accounts='ssp_isp@112.106.111.11';

-- Mariadb
-- Mariadb는 IP정보까지 입력할수 없음
SET GLOBAL server_audit_excl_users=admin,test;



/*================================================================================
 * audit_log_statement_policy 옵션
 * -> 쿼리 정보 감사
 *  - ALL : 모든 명령문 기록
 *  - ERRORS : 에러 명령문 기록
 *  - NONE : 기록하지 않음
 *================================================================================ */
SET GLOBAL audit_log_statement_policy=NONE;

 

Audit Log my.cnf 파일 설정

audit-log=FORCE_PLUS_PERMANENT
audit_log_format=NEW
audit_log_policy=ALL
audit_log_statement_policy=ALL
audit_log_exclude_accounts='[계정]'

 

Audit 삭제

UNINSTALL PLUGIN audit_log;

 

Audit Log 정보 테이블에 insert

Audit Log 테이블 생성 및 SQL 파일 작성

/*================================================================================
 * 테이블 생성
 *================================================================================ */
CREATE TABLE AUDIT_LOG_TEST
(
	  AUDIT_LOG_SN BIGINT NOT NULL AUTO_INCREMENT COMMENT 'AUDIT로그순번'
  , TIMESTAMP    TIMESTAMP NOT NULL             COMMENT '로그생성일시'
  , RECORD_ID    VARCHAR(64) NOT NULL           COMMENT '레코드ID'
  , NAME         VARCHAR(100)                   COMMENT 'AUDIT유형명'
  , CONNECTION_ID BIGINT                        COMMENT 'CONNECTION아이디'
  , USER          VARCHAR(50)                   COMMENT '사용자명'
  , HOST          VARCHAR(50)                   COMMENT 'HOST명'
  , IP            VARCHAR(25)                   COMMENT 'IP주소'
  , COMMAND_CLASS VARCHAR(50)                   COMMENT '명령어'
  , COMMAND_TYPE  VARCHAR(50)                   COMMENT '명령어유형'
  , DB            VARCHAR(50)                   COMMENT 'DB명'
  , REGISTER      VARCHAR(50) DEFAULT "SYSTEM"  COMMENT '등록자'
  , REGIST_DT     DATETIME    DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시'
  , UPDUSR        VARCHAR(30) DEFAULT "SYSTEM"  COMMENT '수정자'
  , UPDT_DT       DATETIME    DEFAULT CURRENT_TIMESTAMP COMMENT '수정일시'
  , PRIMARY KEY(AUDIT_LOG_SN)
  , UNIQUE U_RECORD_ID (RECORD_ID)
)ENGINE=InnoDB DEFAULT CHASET=utf8mb4 COMMENT='AUDIT_LOG_테이블'
;


/*================================================================================
 * SQL파일 생성
 *================================================================================ */
use test_database;
LOAD XML LOCAL INFILE "/data/data01/log/audit/...." INTO TABLE AUDIT_LOG_TEST ROWS IDENTIFIED BY '<AUDIT_RECORD>'
(@TIMESTAMP, RECORD_ID, NAME , CONNECTION_ID , USER , HOST ,IP, COMMAND_CLASS, COMMAND_TYPE , DB)
SET TIMESTAMP = CONVERT_TZ(STR_TO_DATE(@TIMESTAMP, '%Y-%m-%dT%H:%i:%s UTC'), 'UTC', '+9:00');

 

서버 Crontab 등록

#!/bin/bash

# audit log backup
cp /[audit경로]/audit.log /SSP_DEV_DATA/audit/bak/

# audit log table insert
/mysql5/bin/mysql -uroot -p1234 --socket=/SSP_DEV_DATA/data01/mysqld.sock < insert_table.sql

# backup file delete
rm -f /audit/bak/audit.log

 

참고자료

Maria db

https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/#server_audit_excl_users

 

MariaDB Audit Plugin Options and System Variables

Description of Server_Audit plugin options and system variables.

mariadb.com

 

Mysql

https://dev.mysql.com/doc/refman/5.7/en/audit-log.html

 

MySQL :: MySQL 5.7 Reference Manual :: 6.4.5 MySQL Enterprise Audit

6.4.5 MySQL Enterprise Audit Note MySQL Enterprise Audit is an extension included in MySQL Enterprise Edition, a commercial product. To learn more about commercial products, see https://www.mysql.com/products/. MySQL Enterprise Edition includes MySQL Ente

dev.mysql.com

 

AWS RDS 적용

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html

 

MariaDB 감사 플러그인 지원 - Amazon Relational Database Service

MariaDB 감사 플러그인 지원 Amazon RDS는 MySQL 데이터베이스 인스턴스에서의 MariaDB 감사 플러그인 사용을 지원합니다. MariaDB 감사 플러그인은 사용자의 데이터베이스 로그온, 데이터베이스에 대해

docs.aws.amazon.com

 

 

728x90

'Database > MYSQL' 카테고리의 다른 글

My sql 실행 계획 (2/2)  (0) 2022.08.08
My SQL 실행 계획 (1/2)  (0) 2022.08.08
Mysql 모니터링 스크립트  (0) 2022.08.01
Mysql 파티셔닝  (0) 2022.08.01
Mysql DBA 업무 SQL  (0) 2022.08.01
Comments