SQL审核平台--Yearning

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

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源
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
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的架构。
a35d6b11fe578697e61640cdf28ad17639f17bc7
Inception提供的功能很丰富,首先,它可以对提交的所有语句的语法分析,如果语法有问题,都会将相应的错误信息返回给审核者。 还提供语义分析,当一个表,库,列等信息不正确或者不符合规范的时候报错,或者使用了一个不存在的对象时报错等等。 还提供了很多针对SQL规范性约束的功能,这些DBA都是可以通过系统参数来配置的。 更高级的功能是,可以辅助DBA分析一条查询语句的性能,如果没有使用索引或者某些原因导致查询很慢,都可以检查。
还提供SQL语句的执行功能,可执行的语句类型包括常用的DML及DDL语句及truncate table等操作。 Inception 在执行 DML 时还提供生成回滚语句的功能,对应的操作记录及回滚语句会被存储在备份机器上面,备份机器通过配置Inception参数来指定。

五、Inception安装
5.1 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]
如果编译有以下报错:
77eee94a7449b3549e95b234b47cd7cdf5734173
解决办法:
#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下载安装包

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端口,会出现这个页面:
e3c3d2f2dd345c2a7d5eb23967c865519c7f39b7

使用默认账号: 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 直接替换即可
参考链接:
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
SQL 关系型数据库 MySQL
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
Linux系统部署Yearning SQL审核平台结合内网穿透实现公网访问
|
5月前
|
SQL 分布式计算 NoSQL
【SQL 审核查询平台】Archery使用介绍
【SQL 审核查询平台】Archery使用介绍
205 0
【SQL 审核查询平台】Archery使用介绍
|
4月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_65 用户购买平台
「SQL面试题库」 No_65 用户购买平台
|
5月前
|
SQL 消息中间件 关系型数据库
从0到1构建一个Flink SQL流式计算平台
从0到1构建一个Flink SQL流式计算平台
50 0
|
5月前
|
SQL Java 关系型数据库
【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~ 包括sql语句、java、html代码
【Spring Boot+Thymeleaf+MyBatis+mysql】实现电子商务平台实战(附源码)持续更新~~ 包括sql语句、java、html代码
52 0
|
5月前
|
SQL 存储 安全
CloudQuery一体化数据库SQL操作安全管控平台
CloudQuery一体化数据库SQL操作安全管控平台
215 0
|
5月前
|
SQL 安全 数据库
如何防止删库跑路?使用NineData进行SQL变更审核!
在日常开发任务中,对核心库进行变更可能带来一系列风险,如删库跑路和数据泄露等。因此,在变更SQL之前,需要进行审核以确保变更合理、安全、规范。
696 1
|
6月前
|
SQL 算法 JavaScript
在线就能用的 SQL 练习平台(附SQL学习文档)
在线就能用的 SQL 练习平台(附SQL学习文档)
174 0
|
8月前
|
SQL 数据库 数据安全/隐私保护
提高效率的神器!企业级SQL审核与开发工具
NineData SQL开发企业版是一款强大的数据库管理工具,旨在解决企业在数据库管理方面所面临的各种挑战。该工具提供了一整套企业级能力,包括团队协作、权限管控、审计日志、SSO单点登录等功能。它还提供超过100条SQL规范审核,帮助企业规范使用和变更数据库。通过该工具,用户可以简化繁琐的数据库管理任务,提高工作效率。此外,企业版还提供数据安全和隐私保护功能,确保数据的安全性。用户可以通过免费试用期来了解和体验该工具的功能和特性,并根据需求选择适合的计费方式购买。 NineData SQL开发企业版能够帮助企业解决数据库管理中的挑战,提高工作效率和数据安全性。
183 0
提高效率的神器!企业级SQL审核与开发工具
|
10月前
|
SQL 数据库 数据库管理
Archery使用配置 【工单审核流详解】sql优化审核平台
Archery使用配置 【工单审核流详解】sql优化审核平台