目的

在代码审计的时候经常会想看看某个访问会触发哪些数据库操作。目前已知的数据库审计有多家大型厂商的设备,还有seay源码审计系统中的数据库监控1.0

但是、开源的已知的就只有seay源码审计系统中的。而且因作者跑路。不再更新,能够允许监控的mysql数据库版本仅仅支持到5.1。

所以,自行查找、翻阅资料,准备开发C#的数据库审计系统

方法与原理

在绝大部分数据库系统中(你自己开发的数据库系统除外),都会有针对数据库运行的日志记录。如果能在插件中直接读取即可。mysql就可以支持。主要的数据库命令如下:
set global general_log=on;//开启日志
show variables like 'general_log_file';//获取日志文件地址

具体实现方法

1、打开mysql日志系统

2、获得日志文件地址。

3、关闭日志服务

4、在日志文件中插入一串随机字符串(下断点)

5、启动日志服务器

6、用户执行mysql语句

7、终止日志服务

8、读取日志文件内容,并查找第4步记录的随机字符串。

9、读取该字符串以下所有内容

10、处理无用信息,并打印

11、特殊功能:将日志文件置空

功能的实现与重要代码

 public void SqlNonQuery(string sql, ref MySqlConnection connection)
{
using (MySqlCommand sqlQury = new MySqlCommand(sql, connection))
{
sqlQury.ExecuteNonQuery();
}
}
//链接与启动
public string Main(ref MySqlConnection conn)
{
this.SetLogOn(ref conn);
string url = this.GetLogUrl(ref conn);
this.SetLogOff(ref conn);
conn.Close();
return url;
}
public MySqlConnection Connected(string server, string user, string password, string database = "information_schema", string port = "3306")
{
String connetStr = "server=127.0.0.1;port=3306;user=root;password=root; database=information_schema;";
// server=127.0.0.1/localhost 代表本机,端口号port默认是3306可以不写
MySqlConnection conn = new MySqlConnection(connetStr);
try
{
//dosomething
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
return conn;
}
}
//打开日志
public void SetLogOn(ref MySqlConnection connection)
{
//dosomething
}
// 关闭日志
public void SetLogOff(ref MySqlConnection connection)
{
string sql = "set global general_log=off;";
SqlNonQuery(sql, ref connection);
}
//获取Log地址
protected string GetLogUrl(ref MySqlConnection connection)
{
string result = null;
string sql = "show variables like 'general_log_file';"; //看看日志文件保存位置
using (MySqlCommand sqlQury = new MySqlCommand(sql, connection))
{
//dosomething
}
return result;
}
//关闭链接。
public void Closed(ref MySqlConnection connection)
{
string sql = "set global general_log=off;";
if (connection.State == System.Data.ConnectionState.Closed)
return;
SetLogOn(ref connection);
SqlNonQuery(sql, ref connection);
if (connection.State == ConnectionState.Open || connection.State == ConnectionState.Broken)
connection.Close();
}

其他说明

1、为什么会存在关闭又开启日志服务。

答:C#在读取文件的时候,mysql如果开启日志服务,那么该文件被占用。无法读取。(如果有好的方法也请告诉我)

懒癌党福星

下载地址 https://pan.baidu.com/s/1j-dMtJYiOk2Pfo7QoEXHMA

手册地址:https://www.kancloud.cn/qq496672097/limanmanexp/2139143

limanmanExp数据库审计设计思路与重要代码的更多相关文章

  1. legend2---开发日志1(legend的数据库整体设计思路是什么)

    legend2---开发日志1(legend的数据库整体设计思路是什么) 一.总结 一句话总结:不同种类的物品分不同的表放,不放到一个物品表里,取所有物品时一个个表的取就好了 不同种类的物品分不同的表 ...

  2. iOS开发:代码通用性以及其规范 第二篇(猜想iOS中实现TableView内部设计思路(附代码),以类似的思想实现一个通用的进度条)

    在iOS开发中,经常是要用到UITableView的,我曾经思考过这样一个问题,为什么任何种类的model放到TableView和所需的cell里面,都可以正常显示?而我自己写的很多view却只是能放 ...

  3. 整合Kafka+Flink 实例(第二部分 设计思路)

    前     言 拖了蛮久了,一直说要接着上一部分写设计思路以及代码,因为自己技术底子薄弱,加上人又懒,所以一直没能继续,今天补上设计思路及部分代码,后面有时间我会再补充一些应用性的功能,的确有些忙,希 ...

  4. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  5. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...

  6. Redis入门指南(第2版) Redis设计思路学习与总结

    https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...

  7. MVC3 数据验证用法之密码验证设计思路

    描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...

  8. Redis设计思路学习与总结

    版权声明:本文由宋增宽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/222 来源:腾云阁 https://www.qclo ...

  9. 对RESTful Web API的理解与设计思路

    距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...

随机推荐

  1. JavaScript & Atomics

    JavaScript & Atomics Atomics 对象提供了一组静态方法对 SharedArrayBuffer 和 ArrayBuffer 对象进行原子操作. Atomics.add ...

  2. Web 全栈开发 MySQL 面试题

    Web 全栈开发 MySQL 面试题 MySQL MySQL 读写分离 读写分离原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有主从复制完了,才能在此基础上进行 ...

  3. css var & auto width css triangle

    css var & auto width css triangle https://codepen.io/xgqfrms/pen/PooeEbd css var https://codepen ...

  4. js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process

    js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process ...

  5. ip/udp/tcp包 学习

    /** * 以太网 */ class Ethernet { static readonly size = 14; get Destination(): string { return [ this.v ...

  6. C++算法代码——Sumsets[uva10125]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1278 题目描述 给你一个整数的集合S(里面所有的整数均不相同),请你找出最大的 d, ...

  7. 三万长文50+趣图带你领悟web编程的内功心法:一文带你深入解读HTTP的发展史

    看到题目,大家是不是认为根据上一篇(两万字长文50+张趣图带你领悟网络编程的内功心法)一样,其实不然,我们上一边介绍的是网络编程的基本功,有了这些基本功之后,我们就可以在此之上构建更加接近实际应用的w ...

  8. Vulhun-y0usef靶机通关

    Vulhub-y0sef靶机通关 安装靶机环境,下载地址:https://www.vulnhub.com/entry/y0usef-1,624/ 网络模式:桥接 目标:user.txt和root.tx ...

  9. 《进击吧!Blazor!》第一章 5.组件开发

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  10. Gradle 差异化构建

    Compile 默认的依赖方式,任何情况下都会依赖. Provided 只提供编译时依赖,打包时不会添加进去. Apk 只在打包Apk包时依赖,这个应该是比较少用到的. TestCompile 只在测 ...