Java高级交流

Yearning SQL审核平台

2019-05-24  本文已影响0人  WEIJAVA

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

功能
-SQL查询

注意
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 |
+------------------------------------------+-------------------------------------------+

上一篇下一篇

猜你喜欢

热点阅读