SQL审核平台--Yearning

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

Yearning是基于Inception的可视化web端sql审核平台,Yearning SQL审计平台基于Vue.js与Django的整套sql审核平台解决方案,提供基于Inception的SQL检测及执行。

Yearning所需依赖:python >= 3.6、nginx、mysql >= 5.6、Inception


安装方法有两种,docker试用和正式环境部署

docker安装:

#docker run -it -d -p 80:80 -p 8000:8000 -e "HOST=宿主机ip"registry.cn-hangzhou.aliyuncs.com/cookie/yearning:v1.0.0


#docker exec -it container_id /bin/bash


#echo "from core.models import grained;grained.objects.get_or_create(username='admin', permissions={'ddl': '1', 'ddlcon': [], 'dml': '1', 'dmlcon': [], 'dic': '1', 'diccon': [], 'dicedit': '0', 'query': '1', 'querycon': [], 'user': '1', 'base': '1', 'dicexport': '0'})" | python3 manage.py shell



初始账号: admin 密码: Yearning_admin


注意:

由于目前镜像并没有将数据库数据存放目录挂载到宿主机所以不建议在正式环境中使用docker

建议在使用前评估及测试中使用


生产环境部署步骤:

一、nginx安装

1.1添加运行nginx服务进程的用户

#groupadd -r nginx

#chattr -i /etc/passwd /etc/shadow

#useradd -r -g nginx nginx

#chattr +i /etc/passwd /etc/shadow



1.2yum安装Nginx

#yum install nginx -y


二、MySQL5.7安装

2.1下载mysql的repo源

#wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

2.2安装mysql-community-release-el7-5.noarch.rpm包

#rpm -ivh mysql57-community-release-el7-11.noarch.rpm


2.3.安装mysql-server

#yum install -y mysql-community-server


三、Python3.6安装

3.1.安装依赖环境

# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel


3.2下载Python3

# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz


3.3安装python3

# mkdir -p /usr/local/python3

# tar -zxvf Python-3.6.1.tgz

# cd Python-3.6.1

# ./configure --prefix=/usr/local/python3

#make && make install

# ln -s /usr/local/python3/bin/python3 /usr/bin/python3


3.4将/usr/local/python3/bin加入PATH(可选)

# vim ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/python3/bin

export PATH


3.5环境变量修改生效

# source ~/.bash_profile



四、Inception介绍

Inception是集审核、执行、回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及Inception服务器的端口即可,而它相对要审核或执行的语句所对应的线上MySQL服务器来说,是一个客户端,它在内部需要实时的连接数据库服务器来获取所需要的信息,或者直接在在线上执行相应的语句及获取binlog等,Inception就是一个中间性质的服务。图1.1所示为Inception的架构。


Inception提供的功能很丰富,首先,它可以对提交的所有语句的语法分析,如果语法有问题,都会将相应的错误信息返回给审核者。 还提供语义分析,当一个表,库,列等信息不正确或者不符合规范的时候报错,或者使用了一个不存在的对象时报错等等。 还提供了很多针对SQL规范性约束的功能,这些DBA都是可以通过系统参数来配置的。 更高级的功能是,可以辅助DBA分析一条查询语句的性能,如果没有使用索引或者某些原因导致查询很慢,都可以检查。

还提供SQL语句的执行功能,可执行的语句类型包括常用的DML及DDL语句及truncate table等操作。 Inception 在执行 DML 时还提供生成回滚语句的功能,对应的操作记录及回滚语句会被存储在备份机器上面,备份机器通过配置Inception参数来指定。

项目地址:https://github.com/mysql-inception/inception



五、Inception安装

5.1 Git下载源码包

$ git clone https://github.com/mysql-inception/inception.git


5.2 安装依赖包

$ yum install gcc gcc-c++ cmake bison openssl-devel ncurses-devel MySQL-python –y

使用yum安装的bison版本会3.0以上,官方建议使用低于2.6版本的,不然会编译有问题。指定版本下载、安装步骤:

  下载地址,选择合适的版本和压缩文件 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命令了)。


5.3 开始编译安装

首先就是编译,在源码根目录下面有一个文件inception_build.sh,执行命令sh inception_build.sh,会输出使用方法。 实际上只需要执行inception_build.sh debug [Xcode]即可,后面的平台是可选的,如果不指定就是linux平台,而如果要指定是Xcode,就后面指定Xcode,而debug是编译的目录,编译之后,所有的生成文件都在这个目录下面,包括可执行文件Inception。可执行文件在debug/sql/目录下面(不同平台有可能不相同)。

$ cd inception

$ bash inception_build.sh debug [Xcode]

如果编译有以下报错:


解决办法:

#cmake -DWITH_DEBUG=OFF -DCMAKE_INSTALL_PREFIX=./inception -DMYSQL_DATADIR=./inception/data -DWITH_SSL=bundled -DCMAKE_BUILD_TYPE=RELEASE -DWITH_ZLIB=bundled -DMY_MAINTAINER_CXX_WARNINGS="-Wall -Wextra -Wunused -Wno-dev -Wwrite-strings -Wno-strict-aliasing -Wno-unused-parameter -Woverloaded-virtual" -DMY_MAINTAINER_C_WARNINGS="-Wall -Wextra -Wno-dev -Wunused -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement" .


#sh -x  inception_build.sh debug


#make -j6 && make install


编译完成之后,就是使用了,那么需要一个配置文件(inc.cnf):

$ cat /etc/inc.cnf

[inception]

general_log=1

general_log_file=inception.log

port=6669

socket=/tmp/inc.socket

character-set-client-handshake=0

character-set-server=utf8

inception_remote_system_password=root

inception_remote_system_user=wzf1

inception_remote_backup_port=3306

inception_remote_backup_host=127.0.0.1

inception_support_charset=utf8mb4

inception_enable_nullable=0

inception_check_primary_key=1

inception_check_column_comment=1

inception_check_table_comment=1

inception_osc_min_table_size=1

inception_osc_bin_dir=/data/temp

inception_osc_chunk_time=0.1

inception_enable_blob_type=1

inception_check_column_default_value=1


5.4 启动Inception程序

启动方式和MySQL是一样的:

#nohup /data/inception/debug/mysql/bin/Inception --defaults-file=/etc/inc.cnf &


启动如果不报错的话,说明已经启动成功了,实际上很难让它报错,因为非常轻量级。注意:因为Inception支持OSC执行的功能,是通过调用pt-online-schema-change工具来做的,但如果Inception后台启动(&)的话,可能会导致pt-online-schema-change在执行完成之后,长时间不返回,进而导致Inception卡死的问题,这个问题官方后面会解决,但现阶段请尽量不要使用后台启动的方式,或者可以使用nohup Inception &的方式来启动。

启动成功之后,可以简单试一下看,通过MySQL客户端:

#mysql -uroot -h127.0.0.1 -P6669


登录上去之后,再执行一个命令:

mysql> inception get variables;


输出了所有的变量,恭喜你,已经启动成功了,都说了非常简单。


六、安装Yearning

6.1下载安装包

#git clone https://github.com/cookieY/Yearning.git


6.2编辑配置文件:

#vim /Yearning/src/deploy.conf


[mysql]

db = 所创建的库名

address = 数据库地址

port = 数据库端口

password = 数据库密码

username = 数据库用户


[host]

ipaddress = 服务器ip地址:端口 (涉及跨域十分重要!!设置不正确将无法登陆!!) 如 本机地址为192.168.1.2 nginx设置端口为80 则应填写为 192.168.1.2:80 之后通过该地址访问平台。


[Inception]

ip = Inception地址

port = Inception端口

user = Inception用户名

password = Inception密码

backupdb = 备份数据库地址

backupport = 备份数据库端口

backupuser = 备份数据库用户名

backuppassword = 备份数据库密码


[LDAP] LDAP相关设置

LDAP_SERVER = LDAP服务地址

LDAP_SCBASE = LDAP dc 设置 如 dc=xxx,dc=com

LDAP_DOMAIN = LDAP域名 如 xxx.com

LDAP_TYPE = 1 1 通过域名进行ldap认证 0 通过uid进行ldap认证


[email] 邮箱推送相关设置

username = 邮箱发件账号 如 xxxx@163.com password = 邮箱发件账号密码

smtp_server = 邮箱stmp地址, 具体地址请咨询对应邮箱提供者


6.3安装相关依赖

#cd /Yearning/src/

#pip3 install -r requirements.txt 安装相应python依赖库

#python3 manage.py makemigrations && python3 manage.py migrate 初始化数据库

#echo "from core.models import Account;Account.objects.create_user(username='admin', password='Yearning_admin', group='admin',is_staff=1)" | python3 manage.py shell 添加初始化用户

#echo "from core.models import grained;grained.objects.get_or_create(username='admin', permissions={'ddl': '1', 'ddlcon': [], 'dml': '1', 'dmlcon': [], 'dic': '1', 'diccon': [], 'dicedit': '0', 'query': '1', 'querycon': [], 'user': '1', 'base': '1', 'dicexport': '0'})" | python3 manage.py shell 初始化权限

#cp -rf Yearning/webpage/dist/* $NGINX_HOME/html/ 复制编译好的静态文件到nginx html目录下(如自行更改Nginx静态路径地址则将静态文件复制到对应静态文件目录下)

#systemctl start nginx

#启动nginx python3 manage.py runserver 0.0.0.0:8000 启动django 访问deploy.conf 配置文件中ipaddress 填写的地址

默认账号: admin 密码:Yearning_admin


安装完成,浏览器输入ip默认使用80端口,会出现这个页面:



使用默认账号: admin 密码:Yearning_admin登陆即可使用,可能会出现登陆不了的情况(无法跳转页面),这是由于跨域的问题,解决这个问题可以参考:http://blog.csdn.net/apple9005/article/details/54427902

注意事项

默认超级管理员只拥有各个页面的访问权限,其他的权限需自行增加!详情请查看使用说明用户管理

由于Inception 并不原生支持pymysql,所以需更改pymysql相关源码

修改 $PYTHON_HOME/lib/python3.6/site-packages/pymysql下

connections.py 和 cursors.py 两个文件


找到 connections.py 1108行

   if int(self.server_version.split('.', 1)[0]) >= 5:

           self.client_flag |= CLIENT.MULTI_RESULTS

更改为

   try:

       if int(self.server_version.split('.', 1)[0]) >= 5:

           self.client_flag |= CLIENT.MULTI_RESULTS

   except:

       if self.server_version.split('.', 1)[0] >= 'Inception2':

           self.client_flag |= CLIENT.MULTI_RESULTS


找到 cursors.py 345行

if self._result and (self._result.has_next or not self._result.warning_count):

       return

更改为

if self._result:

   return

注: 在install 文件夹下有已经修改的connections.py 和 cursors.py 直接替换即可

参考链接:

https://github.com/cookieY/Yearning

http://www.ywnds.com/?p=9423

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
|
7月前
|
SQL 分布式计算 NoSQL
【SQL 审核查询平台】Archery使用介绍
【SQL 审核查询平台】Archery使用介绍
433 0
【SQL 审核查询平台】Archery使用介绍
|
21天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
3月前
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
|
7月前
|
SQL HIVE UED
【Hive SQL 每日一题】分析电商平台的用户行为和订单数据
作为一名数据分析师,你需要分析电商平台的用户行为和订单数据。你有三张表:`users`(用户信息),`orders`(订单信息)和`order_items`(订单商品信息)。任务包括计算用户总订单金额和数量,按月统计订单,找出最常购买的商品,找到平均每月最高订单金额和数量的用户,以及分析高消费用户群体的年龄和性别分布。通过SQL查询,你可以实现这些分析,例如使用`GROUP BY`、`JOIN`和窗口函数来排序和排名。
409 2
|
7月前
|
SQL 关系型数据库 Java
实时计算 Flink版操作报错之在阿里云DataHub平台上执行SQL查询GitHub新增star仓库Top 3时不显示结果,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
SQL Java 关系型数据库
【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~ 包括sql语句、java、html代码
【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~ 包括sql语句、java、html代码
211 0
|
7月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_65 用户购买平台
「SQL面试题库」 No_65 用户购买平台
|
7月前
|
SQL 消息中间件 关系型数据库
从0到1构建一个Flink SQL流式计算平台
从0到1构建一个Flink SQL流式计算平台
85 0
|
7月前
|
SQL 存储 安全
CloudQuery一体化数据库SQL操作安全管控平台
CloudQuery一体化数据库SQL操作安全管控平台
357 0