mysql基于init-connect的数据库审计

mysql基于init-connect的数据库审计

1、创建审计库

create database auditdb;
create table auditdb.t_audit(
  id int not null auto_increment,
  thread_id int not null,
  login_time timestamp,
  localname varchar(50) default null,
  matchname varchar(50) default null, 
  db_name varchar(50),
  primary key (id)
) comment '审计用户登录信息';

2、授权所有的用户拥有对审计表的插入权限

-- 拼结授权语句
select concat("grant insert on auditdb.t_audit to '",user,"'@'",host,"';") from mysql.user;  

flush privileges;

注意:以后每添加一个用户都必须授权此表的插入权限,要不会连接不上。

3、设置init_connect参数

set global init_connect='insert into auditdb.t_audit(thread_id,login_time,localname,matchname,db_name) values(connection_id(),now(),user(),current_user(),database());';

并在配置文件中增加如下语句:

init-connect='insert into auditdb.t_audit(thread_id,login_time,localname,matchname,db_name) values(connection_id(),now(),user(),current_user(),database());'

以便下次重启时能生效。

4、验证:

使用普通用户登陆mysql,然后查看t_audit审计表:

mysql> select * from t_audit;
+----+-----------+---------------------+--------------+--------------+---------+
| id | thread_id | login_time          | localname    | matchname    | db_name |
+----+-----------+---------------------+--------------+--------------+---------+
|  1 |        12 | 2020-04-17 16:35:50 | u1@localhost | u1@127.0.0.1 | d1      |
|  2 |        14 | 2020-04-17 16:36:23 | u1@localhost | u1@127.0.0.1 | d2      |
|  3 |        15 | 2020-04-19 15:08:48 | u1@localhost | u1@127.0.0.1 | d3      |
+----+-----------+---------------------+--------------+--------------+---------+

至此,完成了对数据的简单审计。

5、扩展说明:

1.init-connect只会在连接时执行,不会对数据库产生大的性能影响

2.init-connect不会记录拥有super权限的用户记录,为了防止init_connect语句由于语法错误或权限问题而所有用户都登陆不了的情况,保证至少super用户能登陆并修改此值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值