美文网首页Java高级交流
Yearning SQL审核平台

Yearning SQL审核平台

作者: WEIJAVA | 来源:发表于2019-05-24 10:11 被阅读0次

    简介
    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 |
    +------------------------------------------+-------------------------------------------+

    相关文章

      网友评论

        本文标题:Yearning SQL审核平台

        本文链接:https://www.haomeiwen.com/subject/ycwbzqtx.html