jjzjj

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

我只想躺平 2023-03-28 原文

一、系统配置

​  系统配置是 系统管理里面二个重点配置项之一,是整个 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_AUTH_GROUP" 、 "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 之使用进阶二的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐