MySQL Audit Log는 MySQL 서버에서 발생하는 다양한 이벤트를 기록하는 기능입니다.
이 로그는 데이터베이스 서버에 대한 접근, 쿼리 실행, 로그인 시도 등과 같은 활동을 추적하고 기록합니다.
Audit Log를 사용하면 데이터베이스 관리자는 누가, 언제, 어떤 데이터에 접근했는지를 정확하게 알 수 있습니다.
MySQL Audit Log를 설정하는 이유는 주로 보안 강화, 규정 준수, 데이터 무결성 확인, 문제 해결 및 시스템 모니터링에 중점을 두고 있습니다
MariaDB 10.6 버전 기준
1. 플러그인 디렉토리 확인
mysql [(none)] > show global variables like 'plugin_dir%';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
1 row in set (0.002 sec)
2. audit 환경변수가 설정되어 있는지 확인
mysql [(none)] > show global variables like 'server_audit%';
Empty set (0.001 sec)
3. audit 설치
mysql [(none)] > INSTALL SONAME 'server_audit';
Query OK, 0 rows affected (0.026 sec)
4. audit 환경변수가 설정되어 있는지 확인
기본 구성은 아래와 같으며 아직 audit 기능은 꺼져있다.
MariaDB [(none)]> show global variables like 'server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | OFF |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
15 rows in set (0.00 sec)
5. 실행
MariaDB [(none)]> set global server_audit_logging = 1 ;
mysql [(none)] > show global variables like 'server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
15 rows in set (0.002 sec)
6. my.cnf 설정
[mysqld]
# ***** Audit Log Config Start *****
server_audit_output_type = file
server_audit_file_rotate_size = 10M
server_audit_file_path = /var/log/mysql/audit.log
server_audit_file_rotations = 10
server_audit_events = connect,query,query_ddl
#server_audit_syslog_ident = mysql
server_audit_syslog_ident = mysql-server_auditing
server_audit_excl_users = 'test1, test2'
## audit logging 0 = OFF , 1 = ON
server_audit_logging = ON
# ***** Audit Log Config End *****
line 1 : 로그의 출력 유형을 지정 file 이 아닌 syslog 사용 가능
line 2 : 로그 파일 크기가 10 메가바이트(MB)에 도달하면 새 파일로 로테이션
line 3 : 파일이 저장될 경로와 파일 이름을 지정
line 4 : 로그 파일의 로테이션 횟수를 설정. 이 경우, 최대 10개의 오래된 로그 파일을 보관하고 그 이상이 되면 가장 오래된 파일부터 삭제.
line5 : 로깅할 이벤트 유형을 지정합니다. connect는 연결 이벤트, query는 쿼리 실행 관련을 로깅. (여러 옵션 사용 가능)
#line 6 : syslog로 로깅할 때 사용할 Syslog identifier를 설정. 현재는 mysql-server_auditing 으로 설정되어 있습니다.
line 7 : 로그에서 제외할 사용자 목록을 지정 (현재는 test1, test2 계정 제외)
line 8 : Audit Log 기능의 활성화 여부
7. 경로 생성
# mkdir -p /var/log/mysql
# chown mysql.mysql /var/log/mysql/
8. mysql 재기동 후 확인
mysql [(none)] > show global variables like 'server_audit%';
+-------------------------------+--------------------------+
| Variable_name | Value |
+-------------------------------+--------------------------+
| server_audit_events | |
| server_audit_excl_users | test1, test2 |
| server_audit_file_path | /var/log/mysql/audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 10485760 |
| server_audit_file_rotations | 10 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+--------------------------+
15 rows in set (0.002 sec)
# ll /var/log/mysql/audit.log
-rw-rw---- 1 mysql mysql 10154495 Apr 23 18:55 /var/log/mysql/audit.log