Inception服务的安装以及使用Python 3 实现MySQL的审计
Inception服务的安装以及使用Python实现MySQL的审计
Bison是Inception服务所依赖的包之一,但是某些Linux版本已安装的Bison,或者是通过yum安装的Bison,通常是Bison 3.0+版本的.
对于Inception程序来说,其Bison版本是过高的,会导致Inception在编译的过程出错,按照官方的建议,最好需要Bison 2.5这个版本。
因此需要手动安装Bison 2.5这个版本的依赖包。
Bison的安装
Bison下载
下载地址,选择合适的版本和压缩文件 http://ftp.gnu.org/gnu/bison/,这里下载的是bison-2.5.1.tar.xz这个版本的包。
解压
xz -d bison-2.5.1.tar.xz
tar -xvf bison-2.5.1.tar

安装
进入解压后的bison路径中,cd bison-2.5.1,按照正常的源码包依次编译安装即可。
./configure
make && make install

完成安装,检查Bison的版本,bison -V(记得之前要设置环境变量的,这里安装完之后直接就识别Bison命令了)。

最后安装其其他的相关依赖包
yum install gcc gcc-c++ cmake openssl-devel ncurses-devel MySQL-python git –y
Inception的安装
源码下载
下载源代码 git clonehttps://github.com/mysql-inception/inception.git

编译&&安装
进入Inception目录之后执行:bash inception_build.sh debug [Xcode]
经过十几分钟漫长的编译安装完成之后,确认安装成功。
如果是第一次安装失败,可能是缺少依赖的包或者是依赖的包的版本不对,可以根据具体的错误进行处理,重新安装需要删除安装失败生成的debug目录,否则无法继续安装。

添加一个最基本的Inception配置文件

启动Inception服务
/usr/local/inception/debug/mysql/bin/Inception --defaults-file=/etc/inc.cnf &

从本地连接至Inception服务

至此,Inception服务已完全安装成功。
使用Python(Python3)实现MySQL的审计作业。
Inception在验证MySQL脚本的有效性的时候,有自己的特定的格式,因此要将带验证(执行)的sql脚本组装成Inception服务指定的格式。
--Inception开始标志
/*--user=username;--password=*****;--host=***.***.***.***;--enable-check;--port=3306;*/
inception_magic_start; --中间开始是sql语句
use mysql;
CREATE TABLE adaptive_office(id int); --Inception结束标志
inception_magic_commit;
网上大多数环境使用Python做Inception的审计,应该使用的是Python2,如果换做是Python3,发现根本无法正常连接至Inception服务。
正常连接的时候,一直报错:“invalid literal for int() with base 10: 'Inception2'”
原因应该是connections.py在连接到Inception服务参数解析类型转换的时候有一点问题。
参考:http://blog.51cto.com/amnesiasun/1947605,修改Python的connections.py文件中的_request_authentication方法
这样才能使用Python3正常连接至Inception服务。

如下是一个使用Python做MySQL脚本审计的一个demo
#!/usr/bin/python
# -\*-coding: utf-8-\*-
import pymysql
import sys, os
import time # 执行还是校验
operation = '--enable-check'
# operation = '--enable-execute;--enable-ignore-warnings;--enable-force' # 发布目标服务器
connstr_target = {'host': '***.***.***.***', 'port': 3306, 'user': 'root', 'password': '***', 'db': 'inception_testdb', 'charset': 'utf8mb4'}
# inception server
connstr_inception = {'host': '***.***.***.***', 'port': 6669, 'user': 'root', 'password': '', 'db': '', 'charset': 'utf8mb4'} # inception格式要求
prefix_format = "/*--user={};--password={};--host={};{};--port={};*/ ".format(connstr_target['user'],
connstr_target['password'],
connstr_target['host'],
operation,
connstr_target['port']) \
+ '\n' \
+ "inception_magic_start;"
suffix_format = "inception_magic_commit;" #待执行的sql语句
sql_demo1 = ''' use inception_testdb;
alter table test_inception
add column remark varchar(200);''' try:
# 将待执行的sql语句组合成inception识别的格式
sql_demo1_with_format = prefix_format + "\n" + sql_demo1 + "\n" + suffix_format print(sql_demo1_with_format) # 连接至inception 服务器
conn_inception = pymysql.connect(host=connstr_inception['host'],
port=connstr_inception['port'],
user=connstr_inception['user'],
password=connstr_inception['password'],
charset=connstr_inception['charset']) cur = conn_inception.cursor() cur.execute(sql_demo1_with_format)
result = cur.fetchall()
num_fields = len(cur.description)
field_names = [i[0] for i in cur.description]
print(field_names)
#打印出来Inception对MySQL语句的审计结果
for row in result:
print(row[0], "|", row[1], "|", row[2], "|", row[3], "|", row[4], "|", row[5], "|", row[6], "|", row[7], "|",
row[8], "|", row[9], "|", row[10]) cur.close()
conn_inception.close() except Exception as err:
print(err)
finally:
print('****************')
errlevel=0表示语句正常,1的话表示有警告信息,比如字段没有默认值,没有comment等,2的话表示严重的错误,比如往表中增加一个已经存在的字段等等。
比如如下的审计结果中有一个errlevel=2的结果,原因是表中已经存在了remark字段,再增加一个同名的字段,肯定是通不过的,因此显示“Column 'remark' have existed.”这个错误,
除了上述错误,也会显示执行alter table test_inception add column remark varchar(200);这个语句产生的其他类型的错误(或者警告)。
需要了解的就是,一些潜在的不是严重错误级别的问题,其警告类型是可以配置化的,
比如字段没有comment,可以在Inception服务一级配置为没有comment不显示警告,亦或是字段没有默认值,Inception也会给予一个警告,这些非严重错误,都可以根据情况进行配置(是否给出告警)
当然,这里仅仅是一个demo,对于Inception审计出来的结果,可以根据具体要求做的更加可视化一些。
['ID', 'stage', 'errlevel', 'stagestatus', 'errormessage', 'SQL', 'Affected_rows', 'sequence', 'backup_dbname', 'execute_time', 'sqlsha1']
1 | CHECKED | 0 | Audit completed | None | use inception_testdb | 0 | '0_0_0' | None | 0 |
2 | CHECKED | 2 | Audit completed | Column 'remark' have existed.
Column 'remark' in table 'test_inception' have no comments.
Column 'remark' in table 'test_inception' is not allowed to been nullable.
Set Default value for column 'remark' in table 'test_inception' | alter table test_inception
add column remark varchar(200) | 1 | '0_0_1' | 116_196_94_250_8000_inception_testdb | 0 |
对于Inception审计结果,也不是完全合理的,比如mysql中创建索引的语句,支持两种语法,alter table的方式和create index的方式。
早期的mysql版本都是通过alter table的语法增加索引的,后面的mysql支持了create index的语法,但是Inception对于create index的语句也是给予一个严重级别的告警的。
另外对于DML的语句支持也有限,比如insert语句,如果insert语句插入一条与现在表中存在主键冲突的值,Inception也是检测不出来的,
Inception更多的是检测语法这个层面的错误。
其他
整体看Inception是一个功能非常强大的软件(服务),本文管中窥豹,仅粗略做了一下尝试,仅供参考,更多请参考http://mysql-inception.github.io/inception-document/。
最后参考官方文档
不得不说,Inception还是国内比较牛逼的审计(执行,回滚等)MySQL管理的利器之一了,最起码开源了,是骡子是马拉已经来出来遛了,认可程度还是比较高的,没有相当的实力,是拦不下这个瓷器活的。
能正常使用Python连接至Inception实现最基本的SQL审计之后,就可以尝试适合自己的审计方式,以及发掘Inception更多的功能了。
最好的当然是官方的参考文档了:http://mysql-inception.github.io/inception-document/
参考
http://mysql-inception.github.io/inception-document/
http://www.ywnds.com/?p=9423
http://blog.51cto.com/amnesiasun/1947605
Inception服务的安装以及使用Python 3 实现MySQL的审计的更多相关文章
- 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用
2018年3月19日 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5 ...
- 【Apache】Apache服务的安装(一)
Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行 ...
- CentOS 7 Apache服务的安装与配置
原文出处:http://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器.早期的Apache服务器由Apache Gro ...
- CentOS 7 Apache服务的安装与配置(转)
https://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器.早期的Apache服务器由Apache Group来维 ...
- 编程语言、Python介绍及其解释器安装、运行Python解释器的两种方式、变量、内存管理
一.编程语言介绍 1.1 机器语言:直接用计算机能理解的二进制指令来编写程序,直接控制硬件. 1.2 汇编语言:在机器语言的基础上,用英文标签取代二进制指令来编写程序,本质上也是直接控制硬件. 以上2 ...
- Splash (渲染JS服务)介绍安装
一. splash介绍 1.Splash 是一个带有 HTTP API 的 javascript 渲染服务.它是一个带有 HTTP API 的轻量级浏览器,使用 Twisted 和 QT5 在 Pyt ...
- 编写Windows服务疑问2:探索服务与安装器的关系
首先,来弄两个服务,一个叫“飞机”,一个叫“火车”. public class FeiJiService : ServiceBase { public FeiJiService() { Service ...
- 关于httpd服务的安装、配置
httpd是Apache超文本传输协议(HTTP)服务器的主程序.通常,httpd不应该被直接调用,而应该在linux系统中由 apachectl 调用.接下来我们将了解有关httpd服务的安装与配置 ...
- window下安装pip工具,再利用pip安装工具来安装其他的python包
1.在安装pip前,请确认你window系统中已经安装好了python,和easy_install工具,如果系统安装成功,easy_install在目录C:\Python27\Scripts 下面,如 ...
随机推荐
- 基于 HTML5 WebGL 的 3D 服务器与客户端的通信
这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算 ...
- 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识
下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前请把 ch3-4 分支中的 code/ 目录导入微信开发工具 这一 ...
- 小白的Python之路 day3 函数
1.函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码 1 2 ...
- java I/O---复制文本文件
利用FileInputStream 和FileOutputStream 复制文本 1 public class CopyTextByBuffer { 2 3 /** 4 * @param args 5 ...
- React的JSX语法及组件
最近一个同事很急没有做任何交接就请了陪产假,然后我来维护.说实在的我一开始是一脸懵逼的.因为MV*项目里用的最多的还是Vue:React听说也了解过,但毕竟不熟... 不过不管如何这也是工作:同事也恭 ...
- 598. Range Addition II
Given an m * n matrixMinitialized with all0's and several update operations. Operations are represen ...
- [置顶]
android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- Java SE 8 流库(三)
1.7. Optional类型 容器对象,可能包含或不包含非空值.如果存在一个值,isPresent()将返回true,get()将返回值.还提供了依赖于包含值是否存在的附加方法,如orElse()( ...
- Search 命令详解
*查: ls : 查看文件等信息 /cat: 查看文件只显示最后一页. /cat > filename:创建新文件 /cat file1 file2 > file:合并文件 / -A ...
- unity -- Time类(持续更新中)
2018年了,新年总是会制定很多具体目标和计划,不管能否坚持去完成,初衷和决心总是要有的.本年第一篇博客终于开始下笔了,先立一些今年和公司业务无关的的flag: 1.希望每月或两月能看一套蛮牛游戏上的 ...