limanmanExp数据库审计设计思路与重要代码
目的
在代码审计的时候经常会想看看某个访问会触发哪些数据库操作。目前已知的数据库审计有多家大型厂商的设备,还有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数据库审计设计思路与重要代码的更多相关文章
- legend2---开发日志1(legend的数据库整体设计思路是什么)
legend2---开发日志1(legend的数据库整体设计思路是什么) 一.总结 一句话总结:不同种类的物品分不同的表放,不放到一个物品表里,取所有物品时一个个表的取就好了 不同种类的物品分不同的表 ...
- iOS开发:代码通用性以及其规范 第二篇(猜想iOS中实现TableView内部设计思路(附代码),以类似的思想实现一个通用的进度条)
在iOS开发中,经常是要用到UITableView的,我曾经思考过这样一个问题,为什么任何种类的model放到TableView和所需的cell里面,都可以正常显示?而我自己写的很多view却只是能放 ...
- 整合Kafka+Flink 实例(第二部分 设计思路)
前 言 拖了蛮久了,一直说要接着上一部分写设计思路以及代码,因为自己技术底子薄弱,加上人又懒,所以一直没能继续,今天补上设计思路及部分代码,后面有时间我会再补充一些应用性的功能,的确有些忙,希 ...
- 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路
最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...
- WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...
- Redis入门指南(第2版) Redis设计思路学习与总结
https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...
- MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...
- Redis设计思路学习与总结
版权声明:本文由宋增宽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/222 来源:腾云阁 https://www.qclo ...
- 对RESTful Web API的理解与设计思路
距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...
随机推荐
- React + GraphQL 2020 速成课程
React + GraphQL 2020 速成课程 technologies React (to build our user interface) GraphQL (to get and chang ...
- H.265 & H.264
H.265 & H.264 HEVC (H.265) vs. AVC (H.264) https://en.wikipedia.org/wiki/High_Efficiency_Video_C ...
- 如何导出android内部存储的文件(不用root)
这段时间公司项目,涉及到数据缓存,由于需要缓冲的数据太多.太大,通过网络请求,再缓存到本地sqlite数据库,太费时间,消耗流量.所以准备先在本地保存一个标准版sqlite数据库(包含数据),打包到a ...
- 关于USDN你想知道的一切
稳定币的发展只有短短几年的时间.稳定币最早起源于 2014 年 Bitfinex 组建的泰德公司发行的 USDT.稳定币是一种具有稳定价值的加密货币.稳定币诞生的背景是加密货币的价格波动巨大,其作为一 ...
- pytorch中修改后的模型如何加载预训练模型
问题描述 简单来说,比如你要加载一个vgg16模型,但是你自己需要的网络结构并不是原本的vgg16网络,可能你删掉某些层,可能你改掉某些层,这时你去加载预训练模型,就会报错,错误原因就是你的模型和原本 ...
- banner自用图床2
- 死磕以太坊源码分析之EVM动态数据类型
死磕以太坊源码分析之EVM动态数据类型 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. So ...
- 基于docker搭建DNSmasq
一.概述 DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能.它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出 ...
- 剑指 Offer 65. 不用加减乘除做加法 + 位运算
剑指 Offer 65. 不用加减乘除做加法 Offer_65 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...
- MySQL深入研究--学习总结(3)
前言 接上文,继续学习后续章节.细心的同学已经发现,我整理的并不一定是作者讲的内容,更多是结合自己的理解,加以阐述,所以建议结合原文一起理解. 第九章<普通索引和唯一索引,如何选择> 从查 ...