MariaDB와 MySQL은 사용자의 액세스를 기록해야하는 경우 이전에는 데이터베이스 솔루션을 사용해야 했다. 그러나 현재는 Audit log 플러그인을 이용해서 액세스 기록을 할 수 있게되었다.
기본적으로 MariaDB Audit 플러그인의 목적은 서버의 활동을 기록하는 것으로, 각 클라이언트 세션에 대해 누가 서버에 접속했는지 ( 사용자 / 호스트 ) 쿼리 내용, 엑세스한 테이블을 기록하는 것이다.
MariaDB 감사 플러그인은 MariaDB, MySQL(버전 5.5.34 및 10.0.7 현재) 및 Percona Server에서 작동합니다. MariaDB는 기본적으로 버전 10.0.10 및 5.5.37의 감사 플러그인을 포함하기 시작했으며 MariaDB 5.5.20의 모든 버전에 설치할 수 있습니다 .
■ 감사 플러그인 설치
1. Plugin directory 확인
MariaDB [(none)]> show variables like '%plugin_dir%';
+---------------+------------------------------------------------+
| Variable_name | Value |
+---------------+------------------------------------------------+
| plugin_dir | /data/mariadb-10.2.12-linux-x86_64/lib/plugin/ |
+---------------+------------------------------------------------+
1 row in set (0.00 sec)
2.현재 Audit plugin이 설치 되어있는지 확인
MariaDB [(none)]> show global variables like '%server_audi%';
Empty set (0.00 sec)
3.Plugin 설치
MariaDB [(none)]> install plugin server_audit soname 'server_audit.so';
Query OK, 0 rows affected (0.07 sec)
4.설치되어있는지 확인
MariaDB [(none)]> select * from mysql.plugin;
+--------------+-----------------+
| name | dl |
+--------------+-----------------+
| server_audit | server_audit.so |
+--------------+-----------------+
1 row in set (0.00 sec)
■ my.cnf 수정
- server_audit_output_type : 원하는 출력 유형을 지정 ( Default : File ) syslog : syslogd 데몬으로 전송한다.
- server_audit_syslog_ident : SYSLOG 모드 변수입니다. 각 syslog 레코드의 'ident' 부분에 대한 문자열 값입니다. 기본값은 'mysql-server_auditing'입니다. 새 값은 로깅을 다시 시작한 후에만 적용됩니다.
- server_audit_excl_users : Audit에서 제외할 유저 설정이다 하지만 Connection 이벤트는 이 설정 값과 상관없이 모늗 유저에 대해 기록을 남긴다.
- server_audit_logging : audit_logging을 활성화 시킬 것인지
[root@lee ~]# vi /etc/my.cnf
[mysqld]
(생략)
server_audit_output_type = syslog
server_audit_syslog_ident = mysql
server_audit_excl_users = 'root'
server_audit_logging = 1
* Audit 관련 설정값들은 동적으로도 바꿀수 있다.
MariaDB [(none)]> set global server_audit_logging=ON;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> set global server_audit_output_type=file;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> set global server_audit_file_path='/data/log/audit.log';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> set global server_audit_events='connect,query,query_ddl';
Query OK, 0 rows affected (0.00 sec)
■ Audit 파일에 떨어지는 확인
- Lee 유저로 test.test 테이블을 조회하고 Audit log에 남는지 확인해보자
[root@redis ~]# mysql -ulee -p
MariaDB [(none)]> use test;
MariaDB [test]> select * from test;
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
##LOG 확인
[root@redis ~]# cat /data/log/audit.log
(생략)
20211025 13:53:41,redis,lee,localhost,46,0,CONNECT,,,0
20211025 13:53:41,redis,lee,localhost,46,81,QUERY,,'select @@version_comment limit 1',0
20211025 13:53:42,redis,lee,localhost,46,82,QUERY,,'SELECT DATABASE()',0
20211025 13:53:42,redis,lee,localhost,46,84,QUERY,test,'show databases',0
20211025 13:53:42,redis,lee,localhost,46,85,QUERY,test,'show tables',0
20211025 13:53:46,redis,lee,localhost,46,87,QUERY,test,'select * from test',0
20211025 13:54:22,redis,lee,localhost,46,0,DISCONNECT,test,,0