Yearning SQL审核平台

简介
Yearning 开源的MYSQL SQL语句审核平台
提供数据库字典查询,查询审计,SQL审核等多种功能

功能
-SQL查询

  • 查询导出
  • 查询自动补全
    - SQL审核
  • 流程化工单
  • SQL语句检测
  • SQL语句执行
  • SQL回滚
  • 历史审核记录
    - 推送
  • 站内信工单通知
  • E-mail工单推送
  • 钉钉webhook机器人工单推送
    - 其他
  • todoList
  • LDAP登陆
  • 用户权限及管理
  • 拼图式细粒度权限划分(共12项独立权限,可随意组合)

注意
Yearning 是基于Inception的web可视化SQL审核平台,其本身只提供可视化交互页面并不具备sql审核的能力。所以必须搭配Inception一起使用。建议使用者先熟悉Inception使用方法后再进行使用

Yearing 依赖于inception,inception是核心,做SQL语句检测、SQL语句执行、SQL回滚
乌云的安装目录都在/usr/local/

一、安装inception

1、安装相关依赖包

yum -y install cmake libncurses5-dev libssl-dev g++ bison gcc gcc-c++ openssl-devel ncurses-devel mysql MySQL-python

安装bison依赖包

 cd /usr/local/    
 wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
 tar zxvf bison-2.5.1.tar.gz
 cd bison-2.5.1
 ./configure
 make && make install

2、下载inception git clone https://github.com/mysql-inception/inception.git,这个已经闭源,源码我本地保存了一遍(我的网盘/中间件相关/yearing/inception-master.zip,需要的可以联系我)

解压后进入inception-master目录执行sh inception_build.sh debug 安装,时间有点久,各种c语音的安装
注意: debug是安装目录,可以自行更改,安装时如果出错,需要删掉debug目录,重新执行sh inception_build.sh debug 命令,直到安装成功

cd  /usr/local/inception-master
sh  inception_build.sh  debug

3、安装成功后,编辑配置文件inc.cnf,此文件放在任意目录都可以,乌云放在etc目录下
vim /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_backup_host=10.139.xx.xx
inception_remote_backup_port=3306
inception_remote_system_user=test
inception_remote_system_password=test10 

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

其中特别参数解释
inception_remote_system_user=test          ##远程备份数据库用户名
inception_remote_system_password=test       ##远程备份数据库用户密码
inception_remote_backup_port=3306          ##远程备份数据库端口
inception_remote_backup_host=10.xx.xx.xx      ##远程备份数据库IP地址,本次演示例如10.139.xx.xx
inception_support_charset=utf8mb4,utf8,latin1   ##建表、建库MYSQL支持的字符集类型

目前乌云的备份库是公用yearing docker自动安装的mysql,然后创建一个wuyun账号来使用,建议新建一个mysql当做备份库,考虑每次执行都会勾选备份,数据量会很大
备份是做sql回滚使用的,如果不需要sql回滚,可以不配置这4个配置项,个人建议配置,因为一般都需要备份和回滚功能

4、启动 inception
在安装目录(上面指定的是debug)下,找到mysql/bin inception 就是在mysql的源码基础上开发的,就是一个mysql

cd /usr/local/inception-master/ debug/mysql/bin/
nohup ./Inception  --defaults-file=/etc/inc.cnf  >>/dev/null 2>&1 &

注意:要用后台启动的方式启动,需要指定 inc.cnf文件,乌云放在etc目录下,如果要重启,只能kill 进程,再执行这个命令启动

5、验证测试
用mysql连接下,端口是inc.cnf 中配置的6669端口
mysql -uroot -h127.0.0.1 -P6669
连接成功后执行 inception get variables;
输出了所有的变量,表示已经启动成功了

二、安装Yearning

1、因为本次是用docker-compose 启动的,所以要先安装docker-compose

yum install docker
pip install docker-compose

2、下载 git clone https://github.com/cookieY/Yearning.git
3、乌云用的docker的方式安装Yearning,解压安装并启动

unzip Yearning-master.zip
cd /usr/local/Yearning-master
cd install/yearning-docker-compose/
docker-compose up -d

请注意本地不要占用8080 如需要更改端口可再docker-compose.yml文件中更改,3306端口不可更改!
之后访问8080端口。
web系统 默认用户名密码也在docker-compose.yml 中,用户admin 密码: Yearning_admin

4、查看docker进程

docker ps
image.png

两个进程,第一个是yearning,第二个是mysql
连接yearning mysql,root密码在docker-compose.yml配置

mysql -u root -h 127.0.0.1 -P3306 -p

连接成功代表mysql没问题
注意事项:虽然看起来yearing 进程有了,但是后面访问的时候可能访问不了,原因可能是docker一键安装和启动的时候,先启动yearing,mysql还未安装或启动成功,导致连接不上mysql,可以单独重启这个进程再试试,如果正常访问可以不管这一步

docker restart yearning-docker-compose_yearning_1 

docker-compose中已经包含了mysql且挂载本地目录,不存在容器销毁数据消失的问题,但如果你想使用外部mysql,可使用以下步骤:(目前乌云没用这种方式,我也没尝试过)

新建Yearning库,设置字符集为UTF-8,然后在Yearning库中导入sql文件(Yearning/install/yearning-docker-compose/init-sql)
docker run -d -e HOST=主机地址 -e MYSQL_ADDR=mysql地址 -e MYSQL_USER=mysql用户名 -e MYSQL_PASSWORD=mysql密码 -p8080:8000 registry.cn-hangzhou.aliyuncs.com/cookie/yearning:latest

三、安装nginx配置代理转发

乌云用的是金融云,必须走域名转发才能访问web界面
yum install nginx
NGINX配置如下:
vim /etc/nginx/conf.f/yearning.conf

server {
     listen                    80;
     server_name         yearning.xxx.com;
 
     location / {
 
         proxy_pass  http://192.168.x.x:8080;  #改成yearning所在服务器地址和对应端口
         #proxy_redirect     off;
         proxy_set_header   Host             $host;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
     }
 }

重启nginx,并设置域名解析后,打开页面,默认账号/密码 admin / Yearning_admin
注:如果无法打开页面,原因可能是docker启动web后初始化MySQL了,可用 docker restart yearning-docker-compose_yearning_1 重新启动试试。同 第二步第4小步一样

登录成功后,记得修改默认密码

四、yearning 使用上的一些坑

1、提工单时,如果勾选了备份,审核执行时,会找到inception中的/etc/inc.cnf 里配置的inception_remote参数信息,进行数据库连接和备份功能(就是创建数据库,库名为ip连接+端口+库名,然后创建表,表名为执行的表名,在生成回滚语句,比如insert 会生成delete)
如果使用sql回滚功能,则一定要再此处配置备份库信息。

2、推送设置,这个不设置无法添加用户,会一直提示邮箱错误

3、添加数据库,添加后记得测试下连接

4、给账号分配数据库,不分配数据库,用户无法使用 工单提交功能。

其他没有什么特殊的地方,具体使用方法参考官方文档。
参考文章:
https://guide.yearning.io/
https://github.com/cookieY/inception-document/blob/master/docs/install.md
http://www.cnblogs.com/shhnwangjian/p/8464172.html
https://github.com/cookieY/Yearning
https://www.cnblogs.com/neptunemoon/p/6512121.html

五、Inception 变量

inception_enable_identifer_keyword 这个变量改成1居然不报错,OFF依然报错,奇怪了


image.png

获取所有变量,inception get variables;


image.png

设置变量inception set inception_check_insert_field=off;


image.png

别人导出的
+------------------------------------------+-------------------------------------------+
| autocommit | OFF |
| bind_address | * |
| character_set_system | utf8 |
| character_sets_dir | /root/share/charsets/ |
| connect_timeout | 10 |
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d %H:%i:%s |
| general_log | ON |
| general_log_file | /usr/local/inception/data/inception.log |
| inception_check_autoincrement_datatype | ON |
| inception_check_autoincrement_init_value | ON |
| inception_check_autoincrement_name | ON |
| inception_check_column_comment | ON |
| inception_check_column_default_value | OFF |
| inception_check_dml_limit | ON |
| inception_check_dml_orderby | ON |
| inception_check_dml_where | ON |
| inception_check_identifier | ON |
| inception_check_index_prefix | ON |
| inception_check_insert_field | ON |
| inception_check_primary_key | ON |
| inception_check_table_comment | OFF |
| inception_check_timestamp_default | OFF |
| inception_ddl_support | OFF |
| inception_enable_autoincrement_unsigned | ON |
| inception_enable_blob_type | OFF |
| inception_enable_column_charset | OFF |
| inception_enable_enum_set_bit | OFF |
| inception_enable_foreign_key | OFF |
| inception_enable_identifer_keyword | OFF |
| inception_enable_not_innodb | OFF |
| inception_enable_nullable | OFF |
| inception_enable_orderby_rand | OFF |
| inception_enable_partition_table | OFF |
| inception_enable_pk_columns_only_int | OFF |
| inception_enable_select_star | OFF |
| inception_enable_sql_statistic | ON |
| inception_max_char_length | 16 |
| inception_max_key_parts | 5 |
| inception_max_keys | 16 |
| inception_max_primary_key_parts | 5 |
| inception_max_update_rows | 10000 |
| inception_merge_alter_table | ON |
| inception_osc_alter_foreign_keys_method | none |
| inception_osc_bin_dir | /user/bin |
| inception_osc_check_alter | ON |
| inception_osc_check_interval | 5.000000 |
| inception_osc_check_replication_filters | ON |
| inception_osc_chunk_size | 1000 |
| inception_osc_chunk_size_limit | 4.000000 |
| inception_osc_chunk_time | 0.100000 |
| inception_osc_critical_thread_connected | 1000 |
| inception_osc_critical_thread_running | 80 |
| inception_osc_drop_new_table | ON |
| inception_osc_drop_old_table | ON |
| inception_osc_max_lag | 3.000000 |
| inception_osc_max_thread_connected | 1000 |
| inception_osc_max_thread_running | 80 |
| inception_osc_min_table_size | 0 |
| inception_osc_on | OFF |
| inception_osc_print_none | ON |
| inception_osc_print_sql | ON |
| inception_osc_recursion_method | processlist |
| inception_password | |
| inception_read_only | OFF |
| inception_remote_backup_host | 127.0.0.1 |
| inception_remote_backup_port | 3307 |
| inception_remote_system_password | *2200004700000000809DDA00000000008027DE4E |
| inception_remote_system_user | root |
| inception_support_charset | utf8 |
| inception_user | |
| interactive_timeout | 28800 |
| max_allowed_packet | 1073741824 |
| max_connect_errors | 100 |
| max_connections | 151 |
| net_buffer_length | 16384 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| port | 6669 |
| query_alloc_block_size | 8192 |
| query_prealloc_size | 8192 |
| socket | /usr/local/inception/data/inc.socket |
| thread_handling | one-thread-per-connection |
| thread_stack | 262144 |
| time_format | %H:%i:%s |
| version | Inception2.1.50 |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
| wait_timeout | 28800 |
+------------------------------------------+-------------------------------------------+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341