미스터 역마살
Mysql Audit Log 본문
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
Mysql
https://dev.mysql.com/doc/refman/5.7/en/audit-log.html
AWS RDS 적용
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html
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