简介
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
两个进程,第一个是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依然报错,奇怪了
获取所有变量,inception get variables;
设置变量inception set inception_check_insert_field=off;
别人导出的
+------------------------------------------+-------------------------------------------+
| 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 |
+------------------------------------------+-------------------------------------------+