SQL审核平台 Archery 之使用进阶二

Posted 我只想躺平

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL审核平台 Archery 之使用进阶二相关的知识,希望对你有一定的参考价值。

一、系统配置

​  系统配置是 系统管理里面二个重点配置项之一,是整个 Archery 的核心部分,是关系到 Archery 平台是否能够正常的走完一个 SQL审批流程的最基本保证。系统配置设置不对,审批流程就无从 " 走起 " ,所以,对系统配置要要比较深刻的认识。

​  系统配置里面包括以下几个部分 --- Inception配置、功能模块配置、通知配置、其他配置,下面一一简单说明下。

1、Inception配置

1)Inception
  • 去哪儿网团队开发的一个集审核、执行、备份及生成回滚语句与一身的 mysql 运维工具(审核引擎)

  • 开发语言C/C++ ,目前只支持C/C++接口、Python接口,在 Mysql 源码的基础上改造过的

  • 由于某些原因,此项目已经长久不更新并且不再开源了,因此很多人把目光转向了 Goincepion
2)Goinception
  • 一个集审核、执行、备份及生成回滚语句与一身的Mysql运维工具,基于自定义规则的审核结果

  • Goinception 是基于 TiDB 的语法解析器,是和 Inception 审核工具的重构,是完全开源免费的
3)使用说明
  • Archery 默认集成了 Inception 和 Goinception 两个工具,使用哪一个都可以,第一行有 " 选择开关"

  • 系统有提示(截图中红色小字),默认 Inception 由于脱敏解析 ,Goinception 由于进行SQL的审核执行

  • Archery平台在刚部署安装好之后,两个必须选择一个并填写上相关的信息

    • 如果选择使用 Inception ,则在截图中对应的 第一行、第四行、第五行进行相关操作 --- 第一行打开按钮开关显示为 " ON " , " INCEPTION_HOST " 和 " INCEPTION_PORT " 分别填写中系统里面对应的 Docker 镜像名和端口即可,这里分别填写 "inception" 、"6669" ,在 LINUX终端里面通过命令 " docker ps " 查看

    • 同样的道理,如果选择使用 Goinception ,则在第二行、第三行 分别填写 "goinception" 、"4000"
    • 根据 Archery的系统提示,考虑到 inception 的具体情况,还是建议根据系统提示来,选择使用 Goinception
4)Mysql 备份功能
  • 配置备份
    • 这里填写的是Archery平台共用的数据库地址,当然也可以选择其他数据库。填写自身的数据库的话,不用去另外设置访问和使用权限了,填写别的数据库注意授权操作。
    • 数据库账号密码 " root " / " 123456 " 是系统默认的,也可以更改 (个人觉得没有必要,比较只有管理员才能够权限进行系统配置的),如果不知道,查看容器 archery 里面的 config.toml 文件,里面对数据库备份操作的相关定义,配置文件路径为 /opt/archery/src/docker-compose/inception 。
    • 要使用数据库的上线备份功能,还有开启这个功能,具体位置中下一个 "配置块" --- "SQL上线" 里面,开启第三行的 "ENABLE_BACKUP_SWITCH" 启用备份功能

5)SQL申请提交测试

  使用账号 testuser001 、testuser002 、testuser003 分别进行SQL上线申请、SQL上线审核、SQL上线执行操作





6)查看数据库
  • 查看 SQL上线正常是否

    查看数据库实例129 下面的test1290 数据库的 info 表

    
    mysql> use test1290;
    Database changed
    mysql> show tables;
    +--------------------+
    | Tables_in_test1290 |
    +--------------------+
    | info               |
    +--------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from info;
    +------+---------+------+---------+
    | id   | name    | age  | address |
    +------+---------+------+---------+
    |   11 | LAOWANG |   20 | CHINA   |
    |   12 | TOM     |   20 | USA     |
    +------+---------+------+---------+
    2 rows in set (0.00 sec)
    
  • 查看备份情况

    查看备份数据库,Archery所在的数据库

    
    [root@test238 ~]# docker ps | grep mysql
    fe0dbd6fa742         mysql:5.7          "docker-entrypoint.s…"      2 days ago      Up 44 hours    0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
    
    [root@test238 ~]# docker exec -it fe bash
    root@fe0dbd6fa742:/# mysql -uroot -p123456
    
    mysql> show databases;
    +--------------------------+
    | Database                 |
    +--------------------------+
    | information_schema       |
    | 10_6_2_129_3306_test1290 |
    | archery                  |
    | inception                |
    | mysql                    |
    | performance_schema       |
    | sys                      |
    +--------------------------+
    7 rows in set (0.00 sec)
    
    mysql> use 10_6_2_129_3306_test1290;
    mysql> show tables;
    +------------------------------------+
    | Tables_in_10_6_2_129_3306_test1290 |
    +------------------------------------+
    | $_$inception_backup_information$_$ |
    | info                               |
    +------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> select * from $_$inception_backup_information$_$;
    +-------------------------+-------------------+------------------+------------------+----------------+-----------------------------------------------------------------------+------------+----------+-----------+------+---------------------+--------+
    | opid_time               | start_binlog_file | start_binlog_pos | end_binlog_file  | end_binlog_pos | sql_statement                                                         | host       | dbname   | tablename | port | time                | type   |
    +-------------------------+-------------------+------------------+------------------+----------------+-----------------------------------------------------------------------+------------+----------+-----------+------+---------------------+--------+
    | 1645413284_162_00000001 | mysql-bin.000001  |             3561 | mysql-bin.000001 |           3844 | insert into info (id,name,age,address) values(99,\\"OKOK\\",50,\\"USA\\") | 10.6.2.129 | test1290 | info      | 3306 | 2022-02-21 11:14:44 | INSERT |
    | 1645424594_172_00000001 | mysql-bin.000001  |             3844 | mysql-bin.000001 |           4126 | insert into info (id,name,age,address) values(444,\\"YOYO\\",40,\\"JP\\") | 10.6.2.129 | test1290 | info      | 3306 | 2022-02-21 14:23:14 | INSERT |
    | 1645588761_231_00000001 | mysql-bin.000001  |             4845 | mysql-bin.000001 |           5127 | insert into info (id,name,age,address) values(12,\\"TOM\\",20,\\"USA\\")  | 10.6.2.129 | test1290 | info      | 3306 | 2022-02-23 11:59:21 | INSERT |
    +-------------------------+-------------------+------------------+------------------+----------------+-----------------------------------------------------------------------+------------+----------+-----------+------+---------------------+--------+
    3 rows in set (0.00 sec)
    
    # 上面的第三条,就是刚才的SQL上线的内容。换一种形式查看,就比较清晰明了了。
    mysql> select * from $_$inception_backup_information$_$\\G;
    *************************** 1. row ***************************
          opid_time: 1645413284_162_00000001
    start_binlog_file: mysql-bin.000001
    start_binlog_pos: 3561
    end_binlog_file: mysql-bin.000001
     end_binlog_pos: 3844
      sql_statement: insert into info (id,name,age,address) values(99,\\"OKOK\\",50,\\"USA\\")
               host: 10.6.2.129
             dbname: test1290
          tablename: info
               port: 3306
               time: 2022-02-21 11:14:44
               type: INSERT
    *************************** 2. row ***************************
          opid_time: 1645424594_172_00000001
    start_binlog_file: mysql-bin.000001
    start_binlog_pos: 3844
    end_binlog_file: mysql-bin.000001
     end_binlog_pos: 4126
      sql_statement: insert into info (id,name,age,address) values(444,\\"YOYO\\",40,\\"JP\\")
               host: 10.6.2.129
             dbname: test1290
          tablename: info
               port: 3306
               time: 2022-02-21 14:23:14
               type: INSERT
    *************************** 3. row ***************************
          opid_time: 1645588761_231_00000001
    start_binlog_file: mysql-bin.000001
    start_binlog_pos: 4845
    end_binlog_file: mysql-bin.000001
     end_binlog_pos: 5127
      sql_statement: insert into info (id,name,age,address) values(12,\\"TOM\\",20,\\"USA\\")
               host: 10.6.2.129
             dbname: test1290
          tablename: info
               port: 3306
               time: 2022-02-23 11:59:21
               type: INSERT
    3 rows in set (0.00 sec)
    
2、功能模块配置

  这个区域主要要三块 --- SQL 上线 、SQL查询 、SQL优化,下面一一进行说明.

1) SQL上线

 "SQL上线 " 这里涉及四小块,下面分别说明

  • 第一块 --- 使用正则表达式相关语句的提交通过的设置,一般很少使用
  • 第二块 --- "ENABLE_BACKUP_SWITCH ",这个是是否开启对上线SQL的备份功能,上没有介绍这里不再赘述了
  • 第三块 --- 关于开启自动审批相关的,感觉这个功能比较 "鸡肋" 吧,审批流程的重点就是让别人去审核并决定是否通过并且执行提交的SQL语句,如果自动审批,可能是在语法放面可以 "把关",但是在其他方面不能够进行把控
  • 第四块 --- 开启SQL上线手动确认,开启之后,我们走个申请流程看看





​  可以看到,开启这个对应SQL审核提交人和中间的审核人是没有影响的,就是到了最后的审批执行人,在操作界面这里多了一个手动执行的按钮,下面用两副截图对三个按钮 (立即执行、手动执行、定时执行) 进行一个说明吧。

2) SQL查询

3)SQL优化

​  关于 SQL查询 和 SQL优化 相关的设置

  • SQL查询包括 开启脱敏、使用 * 号匹配符、设置超时时间、管理员权限限制这四个方面
  • SQL优化是关于是否使用 SQLADVISOR 、SOAR 进行SQL优化的设置

  由于 Archery平台最主要的功能是进行SQL上线的提交和后面的审批,因此这两个功能一般很少使用,笔者这里也没有去做更多的研究说明

3、通知配置

​   通知配置指的是让SQL上线申请提交这个流程,通过第三方的工具,实现在SQL提交之后,后面的审批和执行流程的整个动作,由这些工具去实现智能通知的功能,然后经由第三方工具的界面直接跳转到Archery的操作界面里面,直接进行对SQL审核的审批或者执行动作。
 
​   Archery平台集成了下面第三方工具 --- 邮件、钉钉、企业微信、飞书等。
​   结合公司的情况,我们采用 DingDing 来实现这个功能。具体在前面的 Archery && DingDing 一文中有具体的说明和介绍,这里就不再再次说明了。
 

4、其他配置

  " 其他配置" 一共七项 --- "INDEX_PATH_URL" 、" BINLOG2SQL" 、" DEFAULT_AUTHGROUP" 、 "DEFAULT RESOURCE_GROUP" 、"LOCK_TIME_THRESHOLD"、"LOCK_CNT_THRESHOLD" 、" SIGN_UP_ENABLED "

  • 第一行,是关于系统首页路径设置和更改的,一般不会使用到此项设置。
  • 第二行,实关于 BINLOG2SQL 调用户相关的,此能够基本也不会应用到。
  • 第三、四行是关于资源组、权限组和用户进行关联的操作,一般也不需要特别设置。
  • 第五、六行是设置账号登录失败的进行锁定的操作的,登录失败一定次数后自动锁定自定义的时间,个人感觉,这个功能稍微有点用。
  • 第七行,是关于是否让没有账号的人自动注册申请用户账号。这个不建议开启,第一原因是每个申请的话用户名称可能不统一,不方便后面管理。第二个是申请账号的时候不知道关联到哪些组。第三个原因是做了精确权限管理后,普通账号根本就没有申请权限。所以在账号那一块,还是由管理员来创建。

二、同类其他软件介绍

1、Yearing SQL 审核平台
  • Yearning SQL 审计平台 基于 Vue.js 与 Django 的整套 Msql-Sql 审核平台解决方案
  • Yearning SQL 审计平台 基于Inception 的SQL检测及执行
  • Yearning SQL 审计平台 只能够支持 Mysql数据库 进行Sql 提交、审批和执行的操作
2、Yearing SQL 审核平台界面截图


以上是关于SQL审核平台 Archery 之使用进阶二的主要内容,如果未能解决你的问题,请参考以下文章

搭建sql审核平台archery

SQL审核平台 Archery 之集成 Ldap 篇

搭建sql审核平台archery

SQL审核平台 Archery 之配置 DingDing 通知篇

SQL审核平台 Archery 之安装篇

SQL 审核查询平台