审计介绍
数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。它通过对用户访问数据库行为的记录、分析和汇报,用来帮助用户事后生成合规报告、事故追根溯源,同时加强内外部数据库网络行为记录,提高数据资产安全。数据库审计可以记录某用户在某个时间点对数据库的操作,包括登录、连接、对表的增删改查等等,便于责任追溯,问题查找,当然开启审计功能在一定方面会影响数据库性能。
192.168.200.56 mysql
192.168.200.57 远程测试
实现步骤
1、创建审计日志表
审计日志表记录内容包括:登录数据库的用户、IP、本次登录时间、进入那个数据库,审计必要信息);
create database test_db;
CREATE TABLE `test_db`.`audit` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`USER` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '登录用户名',
`ADRESS` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '登录IP',
`LOGIN_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '登录时间',
`DATABASE` varchar(50),
PRIMARY KEY (`ID`),
KEY `IDX_USER` (`USER`),
KEY `IDX_HOST` (`ADRESS`),
KEY `IDX_LOGIN_TIME` (`LOGIN_TIME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='普通用户审计日志表';
2.查看mysql授权用户
查看mysql授权用户
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| slave | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
3.基于用户insert权限,
grant insert on test_db.audit to 'slave'@'%';
4.动态开启审计日志
set global init_connect="insert into test_db.audit(USER,ADRESS,DATABASE) values(current_user(),substring_index(user(),'@',-1),database());";
5.使用其他机器远程登录mysql,查看审计日志,就可以看到记录了
select * from test_db.audit;
+----+---------+----------------+---------------------+----------+
| ID | USER | ADRESS | LOGIN_TIME | DATABASE |
+----+---------+----------------+---------------------+----------+
| 1 | slave@% | 192.168.200.57 | 2023-08-22 11:45:24 | NULL |
| 2 | slave@% | 192.168.200.57 | 2023-08-22 11:46:29 | NULL |
| 3 | slave@% | 192.168.200.57 | 2023-08-22 11:50:17 | NULL |
| 4 | slave@% | 192.168.200.57 | 2023-08-22 13:35:52 | NULL |
| 5 | slave@% | 192.168.200.57 | 2023-08-22 13:52:20 | test_db |
+----+---------+----------------+---------------------+----------+
6.为了永久生效,必须还要在配置文件中添加如下内容:
[mysqld]
init_connect="insert into test_db.audit(USER,ADRESS,DATABASE) values(current_user(),substring_index(user(),'@',-1),database());";