目录

一、查询审计配置情况

二、永久开启审计

三、临时开启审计

四、设置init-connect

1、创建用于存放连接日志的数据库和表

2、授权某个用户拥有对审计表的select和insert权限

3、设置init_connect参数

五、验证

六、番外

注:有关MySql数据库的其他操作请参见MySql目录进行查找。


一、查询审计配置情况

show global variables like 'log_timestamps';
show global variables like '%general%';

解释:可以看到 log 时间戳是系统时间;此时 log 功能没打开;log 文件放在/var/lib/mysql/jdh.log下,注意这个 log 存放路径是默认的,每个人不一样,根据你自己的情况而定。

二、永久开启审计

注:若想系统重启后还能生效,就需要按如下操作,若临时用一下只需参看【三、临时开启审计】。

vim /etc/mysql/my.cnf
在/etc/mysql/my.cnf中添加下述配置

[mysqld]
general_log = on                                          // on为开启;off为关闭
general_log_file = /var/lib/mysql/jdh.log         // 审计信息存储位置
log_timestamps = SYSTEM                                // 设置日志文件的输出时间为地方时

解释:经验证,其实在mysql中只要打开log开关就会一直开着,也无需在配置文件中进行配置。

注意:上方的 my.cnf 配置文件为我的 linux 服务器上的 mysql 配置文件默认地址,不同系统和不同版本的 mysql 可能不一样。

三、临时开启审计

在mysql中执行以下命令
set global general_log = on;
set global general_log_file = /var/lib/mysql/jdh.log     注:log 保存文件需要改成你自己的,一般是默认路径,就不用改了。
set global log_timestamps = SYSTEM;

解释:基本会默认时间戳和 log 文件位置。大多数只需要第一条命令打开 log 开关就行了。

到此为止我们已经打开了审计得功能,但这只是记录了所有的对数据库的操作,所以接下来我们将通过 init-connect+binlog 来实现相对完整的审计功能。

四、设置init-connect

1、创建用于存放连接日志的数据库和表

create database auditlog;

create table auditlog.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, primary key (id)
)ENGINE=InnoDB default charset=utf8 comment '审计用户登录信息';

2、授权某个用户拥有对审计表的select和insert权限

列出授权所有用户的语句:
select concat("grant insert on auditlog.t_audit to '",user,"'@'",host,"';") from mysql.user;  #拼结授权语句
注:这条语句只是列出了所有语句,需要手动复制再授权一下。
授权某个用户的格式:
grant select,insert on auditlog.t_audit to user@localhost identified by ‘password’;

先创建一个临时用户进行验证:

CREATE USER U1;

再给用户U1赋予对表Student操作的一定权限:

GRANT SELECT, DELETE ON TABLE Student TO U1;

所以以上授权为例:grant select,insert on auditlog.t_audit to U1;

注意: 对于所有的普通级别的用户,必须全部都要对日志表具有读写权限, 否则将导致没有权限的用户无法使用数据库。

3、设置init_connect参数

set global init_connect='insert into auditlog.t_audit(id,thread_id,login_time,localname,matchname) values(null,connection_id(),now(),user(),current_user());';

查看设置成功:

注:若想在系统重启后还能生效,可以并在配置文件中增加如下语句,临时使用则跳过这个步骤

init-connect='insert into auditlog.t_audit(id,thread_id,login_time,localname,matchname) values(null,connection_id(),now(),user(),current_user());'

以上语句以便下次重启时能生效。

五、验证

我们使用新用户 U1 登陆,查看审计表 auditlog.t_audit 是否记录了本次登陆,并尝试能否删除。

接下来使用本用户进行一系列的操作,然后退出。

进入 log 查看删除记录,找出删除的那条记录时间。

登陆 root 用户,查看审计表 auditlog.t_audit 并找出删除记录的人。

发现用户 U1 在2019-05-07 15:18:56 登陆了。

而查看 log 日志发现用户 U1 用户在登陆期间做了删除操作,且登陆时间与 log 表中记录一致,且线程 ID 也一致。铁证如山!

六、番外

access-log表如何维护?

由于是一个log系统,推荐使用archive存储引擎,有利于数据厄压缩存放。如果数据库连接数量很大的话,建议一定时间做一次数据导出,然后清表。

为什么开启了已经保存了所有的操作和用户信息还需要再建立一个表保存用户的登陆信息呢?

1、无论sql有无语法错误,只要执行了就会记录,导致记录大量无用信息,后期的筛选有难度。因此加了表后可以根据一个大体的操作时间来进行筛选出这个时间段中执行这个操作的登陆用户的thread_id,然后再在表中查找这个thread_id号是哪个用户登陆的就可以很快筛选出执行具体某个操作的用户了。

2、因为新建的表普通用户没有权限删除记录,而log文件时可以删除记录的,所以若没有审计表的话若普通用户能接触保存log的那台主机,则能手动删除。

注:有关MySql数据库的更多其他操作请参见MySql目录进行查找。(建议收藏)

参考博文:

mysql数据库开启审计功能_背锅浩的博客-CSDN博客_mysql开启审计功能

mysql基于init-connect+binlog完成审计功能 - 泽锦 - 博客园

MySql数据库之审计(开启log+设置init-connect实现无插件审计)相关推荐

  1. 远程登录另一个mysql 数据库_Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...

    技术交流群:233513714 一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以 ...

  2. Qt实战案例(28)——利用QSQL相关类实现对MySQL数据库的基本操作及相关设置详解

    目录 一.项目介绍 二.项目基本配置 2.1 安装MySQL 2.2 创建Qt项目 2.3 移动libmysql.dll文件 三.UI界面设计 四.主程序实现 4.1 pro文件 4.2 main.c ...

  3. 设置mysql数据库为只读_如何设置mysql数据库为只读

    直奔主题,mysql设置为只读后,没法增删改.html 设置命令:mysql mysql>set global read_only=1;    #1是只读,0是读写 sql mysql> ...

  4. mysql数据库创建表时通过设置什么属性可以设置字段编号自动增加_Mysql数据库创建表样例和解释...

    目录 照着下面样例创建表,设置自己的表名,字段和字段属性,基本都能满足需求啦: 参数解释: 1. AUTO_INCREMENT是设置该字段为自增列: 2. COMMENT '邮箱' :字段备注邮箱 3 ...

  5. MySQL数据库的事务开启,提交和回滚

    事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位. 基于事务的原子性.一致性.隔离性和持续性特征,可以将相关的数据操作定义到一个事务 ...

  6. mysql数据库备份自动备份_设置mysql数据库自动备份

    由于项目需要,在windows下的mysql实现数据库自动备份.经资料查询和尝试,得出方法有两种: 1.使用windows自带的任务计划,然后定时执行一个数据库备份的脚本. 2.使用mysql管理工具 ...

  7. windows命令行工具连接mysql数据库报ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)

    报这个错误的大概率是两个问题 第一个问题环境变量没有配好.(如果你环境没问题可以直接看下面第二个问题) 点击系统设置中的环境变量设置 新增系统变量,变量名是mysql,变量值是按照mysql时的根目录 ...

  8. mcbbs mysql数据库_我的世界服务器CMI - 多功能基础插件 - 永久更新

    价值15欧的插件 仅展示部分特色功能,欲了解全部功能请参"https://www.mcbbs.net/"部分 可显示物品图标的悬浮字系统 PlaceholderAPI变量支持 木牌 ...

  9. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

最新文章

  1. jquery实现截取pc图片_jquery 上传图片自由截取
  2. CentOS6.8下搭建zookeeper web界面查看工具node-zk-browser
  3. node 压缩图片_为了你安全压缩图片我操碎了心
  4. docker容器间双向通信(基于Bridge网桥)
  5. Eclipse扩展点评估变得容易
  6. asp.net如何获取客户端真实IP地址
  7. DXperience 9.1.3
  8. 营业执照号码生成规则
  9. win7 计算机打不开搜狗,Win7系统中搜狗输入法不见了如何解决
  10. unity 是厘米还是米_cm是厘米还是毫米
  11. (转自博客园-雲霏霏)5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
  12. 边缘计算 | 在移动设备上部署深度学习模型的思路与注意点
  13. firefox控制台打开方法
  14. Leetcode 971 C++代码
  15. thinkphp修改上传文件大小
  16. 标签平滑论文笔记:2020《When Does Label Smoothing Help?》
  17. HTML5+CSS3的学习(五)
  18. 管家婆分销v3服务器要什么系统,管家婆分销ERPV3系统使用培训-20210723010355.pptx-原创力文档...
  19. 8种新年烟花摄影调色luts预设
  20. COMFORT 目的地 | 体验积极、健康、有趣的欧洲度假方式

热门文章

  1. php+MySQL 高校党员培训管理系统56161-计算机毕业设计(赠源码)
  2. scrapy + shedule: signal only works in main thread?
  3. 图片存储格式 PNM 以及 PBM/PGM/PPM
  4. win10禁用更新和清理更新文件
  5. 小小数学家(python)
  6. Error: L6218E: Undefined symbol SX1276FskGetPacketCrcOn (referred from sx1276-fsk.o)
  7. JVM,用最简单的语言说清楚JVM(1)
  8. 在HLSL中指定根签名
  9. 36 Oracle深度学习笔记 SLOB 工具使用
  10. Atcoder【AGC006E】 Rotate 3x3