自动补全、回滚!介绍一款可视化 sql 诊断利器

Yearning简介

=================

Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易!

项目地址:https://gitee.com/cookieYe/Ye…

注意:

Yearning 1.x版本需inception提供SQL审核及回滚功能。

Yearning 2.0开始无需依赖Inception,已自己实现了SQL审核/回滚功能

Yearning 功能介绍

================

  • SQL查询
  • 查询工单
  • 导出
  • 自动补全,智能提示
  • 查询语句审计
  • SQL审核
  • 流程化工单
  • SQL语句检测与执行
  • SQL回滚
  • 历史审核记录
  • 推送
  • E-mail工单推送
  • 钉钉webhook机器人工单推送
  • 用户权限及管理
  • 角色划分
  • 基于用户的细粒度权限
  • 注册
  • 其他
  • todoList
  • LDAP登录
  • 动态审核规则配置
  • AutoTask自动执行

Yearning安装

Yearning 不依赖于任何第三方SQL审核工具作为审核引擎,内部已自己实现审核/回滚相关逻辑。

  • 仅依赖Mysql数据库。mysql版本必须5.7及以上版本,创建Yearning库字符集应为UTF8mb4(仅Yearning所需mysql版本)
  • Yearning日志仅输出error级别,没有日志即可认为无运行错误!
  • Yearning 基于1080p分辨率开发仅支持1080p及以上显示器访问

Yearning下载

Yearning-go官方提供二进制下载包,下载地址 https://github.com/cookieY/Ye…。选择你所需要下载的软件包进行下载。

源码安装:你先需要安装一些依赖等,一些相关的安装步骤如下:

<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">~]# <span class="hljs-string">git <span class="hljs-string">clone <span class="hljs-string">https://github.com/cookieY/Yearning.git
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">~]# <span class="hljs-string">mv <span class="hljs-string">Yearning <span class="hljs-string">/usr/local/yearning
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">~]# <span class="hljs-string">cd <span class="hljs-string">/usr/local/yearning/
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">yearning]# <span class="hljs-string">cd <span class="hljs-string">install/
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">install]# <span class="hljs-string">ll
<span class="hljs-string">total <span class="hljs-number">26728
<span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-string">root <span class="hljs-string">root <span class="hljs-number">57763 <span class="hljs-string">Apr <span class="hljs-number">23 <span class="hljs-number">16<span class="hljs-string">:06 <span class="hljs-string">connections.py
<span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-string">root <span class="hljs-string">root <span class="hljs-number">16818 <span class="hljs-string">Apr <span class="hljs-number">23 <span class="hljs-number">16<span class="hljs-string">:06 <span class="hljs-string">cursors.py
<span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-string">root <span class="hljs-string">root <span class="hljs-number">679 <span class="hljs-string">Apr <span class="hljs-number">23 <span class="hljs-number">16<span class="hljs-string">:06 <span class="hljs-string">docker_start.sh
<span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-string">root <span class="hljs-string">root <span class="hljs-number">27270656 <span class="hljs-string">Apr <span class="hljs-number">23 <span class="hljs-number">16<span class="hljs-string">:06 <span class="hljs-string">inception.tar  <span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-string">root <span class="hljs-string">root <span class="hljs-number">11762 <span class="hljs-string">Apr <span class="hljs-number">23 <span class="hljs-number">16<span class="hljs-string">:06 <span class="hljs-string">Yearning.sh
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">install]# <span class="hljs-string">tar <span class="hljs-string">xf <span class="hljs-string">inception.tar
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">install]# <span class="hljs-string">cd <span class="hljs-string">inception/bin/
<span class="hljs-string">[root@test&#xA0;<span class="hljs-string">bin]# <span class="hljs-string">ll
<span class="hljs-string">total <span class="hljs-number">12472
<span class="hljs-string">-rw-r--r-- <span class="hljs-number">1 <span class="hljs-number">501 <span class="hljs-string">games <span class="hljs-number">722 <span class="hljs-string">Jan <span class="hljs-number">3 <span class="hljs-number">10<span class="hljs-string">:39 <span class="hljs-string">inc.cnf
<span class="hljs-string">-rwxr-xr-x <span class="hljs-number">1 <span class="hljs-number">501 <span class="hljs-string">games <span class="hljs-number">9016999 <span class="hljs-string">Oct <span class="hljs-number">12 <span class="hljs-number">2017 <span class="hljs-string">Inception
<span class="hljs-string">-rwxr-xr-x <span class="hljs-number">1 <span class="hljs-number">501 <span class="hljs-string">games <span class="hljs-number">3747312 <span class="hljs-string">Oct <span class="hljs-number">12 <span class="hljs-number">2017 <span class="hljs-string">mysql</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

不过现在官方让直接下载.zip包,直接解压即可(所以这里就不建议使用源码安装了),比较方便。

mysql>&#xA0;create database&#xA0;<span class="hljs-type">Yearning&#xA0;<span class="hljs-keyword">default&#xA0;character&#xA0;<span class="hljs-keyword">set&#xA0;utf8mb4 collate utf8mb4_unicode_ci;<span class="hljs-type">Query&#xA0;<span class="hljs-type">OK,&#xA0;<span class="hljs-number">1&#xA0;row affected (<span class="hljs-number">0.00&#xA0;sec)</span></span></span></span></span></span></span>
mysql> show databases;
+--------------------+
<span class="hljs-params">| Database&#xA0; &#xA0;    &#xA0; &#xA0; |
+--------------------+
<span class="hljs-params">| information_schema |
<span class="hljs-params">| Yearning&#xA0; &#xA0;     &#xA0; &#xA0;|
<span class="hljs-params">| mysql&#xA0; &#xA0; &#xA0; &#xA0;      &#xA0;|
<span class="hljs-params">| performance_schema |
<span class="hljs-params">| sys&#xA0; &#xA0; &#xA0; &#xA0;      &#xA0; &#xA0;|
+--------------------+
<span class="hljs-number">5&#xA0;rows&#xA0;<span class="hljs-keyword">in&#xA0;set (<span class="hljs-number">0.<span class="hljs-number">00&#xA0;sec)</span></span></span></span></span></span></span></span></span></span>

只需要提前安装好Mysql数据库,并按前面的要求进行配置即可。

<span class="hljs-string">[root@CentOS7-1 <span class="hljs-string">~]#&#xA0;<span class="hljs-string">ll
<span class="hljs-string">total&#xA0;<span class="hljs-number">14036
<span class="hljs-string">-rw-------. <span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">1320&#xA0;<span class="hljs-string">Apr&#xA0;&#xA0;<span class="hljs-number">8 <span class="hljs-number">05<span class="hljs-string">:08&#xA0;<span class="hljs-string">anaconda-ks.cfg
<span class="hljs-string">-rw-r--r--&#xA0;&#xA0;<span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-number">14349178&#xA0;<span class="hljs-string">Apr&#xA0;<span class="hljs-number">11 <span class="hljs-number">09<span class="hljs-string">:26&#xA0;<span class="hljs-string">Yearning-2.2.0.linux-amd64.zip</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

上面我们直接从github上下载的最新版本2.2.0:

<span class="hljs-string">[root@CentOS7-1 <span class="hljs-string">~]#&#xA0;<span class="hljs-string">cd&#xA0;<span class="hljs-string">Yearning-go/
<span class="hljs-string">[root@CentOS7-1 <span class="hljs-string">Yearning-go]#&#xA0;<span class="hljs-string">ll
<span class="hljs-string">total&#xA0;<span class="hljs-number">9772
<span class="hljs-string">-rw-r--r--&#xA0;<span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">127&#xA0;<span class="hljs-string">Aug&#xA0;&#xA0;<span class="hljs-number">1&#xA0;&#xA0;<span class="hljs-number">2019&#xA0;<span class="hljs-string">conf.toml
<span class="hljs-string">drwxr-xr-x&#xA0;<span class="hljs-number">6&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">116&#xA0;<span class="hljs-string">Apr&#xA0;&#xA0;<span class="hljs-number">6&#xA0;<span class="hljs-number">22<span class="hljs-string">:32&#xA0;<span class="hljs-string">dist
<span class="hljs-string">-rw-r--r--&#xA0;<span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">620&#xA0;<span class="hljs-string">Jan&#xA0;&#xA0;<span class="hljs-number">8&#xA0;<span class="hljs-number">21<span class="hljs-string">:06&#xA0;<span class="hljs-string">docker-compose.yml
<span class="hljs-string">-rw-r--r--&#xA0;<span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">597&#xA0;<span class="hljs-string">Aug&#xA0;<span class="hljs-number">21&#xA0;&#xA0;<span class="hljs-number">2019&#xA0;<span class="hljs-string">Dockerfile
<span class="hljs-string">-rw-r--r--&#xA0;<span class="hljs-number">1&#xA0;<span class="hljs-string">root&#xA0;<span class="hljs-string">root&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-number">177&#xA0;<span class="hljs-string">Aug&#xA0;<span class="hljs-number">23&#xA0;&#xA0;<span class="hljs-number">2019&#xA0;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

修改配置文件

vim conf.toml

[Mysql]
Db =&#xA0;<span class="hljs-string">"Yearning"
Host =&#xA0;<span class="hljs-string">"127.0.0.1"
Port =&#xA0;<span class="hljs-string">"3306"
Password =&#xA0;<span class="hljs-string">"xxxx"
User =&#xA0;<span class="hljs-string">"root"

[General]&#xA0;</span></span></span></span></span>

SecretKey是token/数据库密码加密/解密的salt。建议所有用户在初次安装Yearning之前将SecretKey更改(不更改将存在安全风险),格式: 大小写字母均可, 长度必须为16位。 特别注意:此key仅可在初次安装时更改!之后不可再次更改!如再次更改会导致之前已存放的数据源密码无法解密,最终导致无法获取相关数据源信息。

初始化

./Yearning -m

务必在-s启动前首先执行-m 初始化操作!如要再次初始化,需要把yearning库下所有表删除,否则重复执行无效。

启动服务

使用帮助

<span class="hljs-selector-attr">[root@CentOS7-1 Yearning-go]# ./<span class="hljs-selector-tag">Yearning&#xA0;<span class="hljs-selector-tag">-h
<span class="hljs-selector-tag">version:&#xA0;<span class="hljs-selector-tag">Yearning/<span class="hljs-selector-tag">2<span class="hljs-selector-class">.2<span class="hljs-selector-class">.0&#xA0;<span class="hljs-selector-tag">general&#xA0;<span class="hljs-selector-tag">author:&#xA0;<span class="hljs-selector-tag">HenryYee
<span class="hljs-selector-tag">Usage:&#xA0;<span class="hljs-selector-tag">Yearning&#xA0;<span class="hljs-selector-attr">[-m migrate]&#xA0;<span class="hljs-selector-attr">[-p port]&#xA0;<span class="hljs-selector-attr">[-s start]&#xA0;<span class="hljs-selector-attr">[-b web-bind]&#xA0;<span class="hljs-selector-attr">[-h help]&#xA0;<span class="hljs-selector-attr">[-c config file]

<span class="hljs-selector-tag">Options:&#xA0;<span class="hljs-selector-tag">-s&#xA0;&#xA0;&#x542F;&#x52A8;<span class="hljs-selector-tag">Yearning&#xA0;
<span class="hljs-selector-tag">-m&#xA0;&#xA0;&#x6570;&#x636E;&#x521D;&#x59CB;&#x5316;(&#x7B2C;&#x4E00;&#x6B21;&#x5B89;&#x88C5;&#x65F6;&#x6267;&#x884C;)&#xA0;
<span class="hljs-selector-tag">-p&#xA0;&#xA0;&#x7AEF;&#x53E3;&#xA0;
<span class="hljs-selector-tag">-b&#xA0;&#xA0;&#x9489;&#x9489;/&#x90AE;&#x4EF6;&#x63A8;&#x9001;&#x65F6;&#x663E;&#x793A;&#x7684;&#x5E73;&#x53F0;&#x5730;&#x5740;&#xA0;
<span class="hljs-selector-tag">-x&#xA0;&#xA0;&#x8868;&#x7ED3;&#x6784;&#x4FEE;&#x590D;,&#x5347;&#x7EA7;&#x65F6;&#x53EF;&#x4EE5;&#x64CD;&#x4F5C;&#x3002;&#x5982;&#x51FA;&#x73B0;&#x9519;&#x8BEF;&#x53EF;&#x76F4;&#x63A5;&#x5FFD;&#x7565;&#x3002;&#xA0;
<span class="hljs-selector-tag">-h&#xA0;&#xA0;&#x5E2E;&#x52A9;&#xA0;
<span class="hljs-selector-tag">-c&#xA0;&#xA0;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;&#xA0;
<span class="hljs-selector-tag">-k&#xA0;&#xA0;&#x7528;&#x6237;&#x6743;&#x9650;&#x53D8;&#x66F4;&#x4E3A;&#x6743;&#x9650;&#x7EC4;(<span class="hljs-number">2.1.<span class="hljs-number">7&#x4EE5;&#x4E0B;&#x5347;&#x7EA7;&#x81F3;<span class="hljs-number">2.1.<span class="hljs-number">7&#x53CA;&#x4EE5;&#x4E0A;&#x4F7F;&#x7528;)&#xA0;
<span class="hljs-selector-tag">-f&#xA0;&#xA0;&#x521D;&#x59CB;&#x5316;<span class="hljs-selector-tag">Admin&#x7528;&#x6237;&#x5BC6;&#x7801;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

打开浏览器 http://192.168.1.9:8000

默认密码:admin/Yearning_admin

相关功能模块介绍

1、用户模块

Dashboard:dashboard主要展示Yearning各项数据包括用户数/数据源数/工单数/查询数以及其他图表,个人信息栏内用户可以修改密码/邮箱/真实姓名,同时可以查看该用户权限以及申请权限(申请权限2.1.7版本后作废)。

我的工单:展示用户提交的工单信息,对于执行失败/驳回的工单点击详细信息后可以重新修改sql并提交,对于执行成功的工单可以查看回滚语句并且快速提交SQL。

工单DLL:DDL相关SQL提交审核,查看表结构/索引,SQL语法高亮/自动补全。

DML审核:DML相关SQL提交审核,SQL语法高亮/自动补全。

查询:查询/导出数据 SQL语法高亮/自动补全 快速DML语句提交。

2、审核模块

工单审核:DDL/DML管理员审核并执行。

查询审核:用户的查询审核。

权限审核:用户的权限审核(2.1.7版本以下)

3、管理管理模块

用户管理:创建/修改/删除用户

数据库管理:添加/编辑/删除 数据源

自动补全、回滚!介绍一款可视化 sql 诊断利器用户权限:用户权限修改/清空

功能设置:设置消息推送相关信息 包括钉钉机器人/email,设置LDAP相关信息,全局配置信息,全局配置开关

审核规则:设置SQL检测规则

AutoTask自动执行任务

2.1.4版本新增:用户可通过改功能设置自动执行任务。当提交的dml语句符合相应任务条件。将会自动执行,无需审核人审核。该功能仅限dml语句使用。请慎重使用!

总结

Yearning是一个SQL审核平台,在一定程度上可以解决运维与开发中间的问题,遗憾的是只支持Mysql,感兴趣的可以尝试下!

参考资料:
https://guide.yearning.io/
https://gitee.com/cookieYe/Ye…

Original: https://www.cnblogs.com/youkanyouxiao/p/12731294.html
Author: 民工哥
Title: 自动补全、回滚!介绍一款可视化 sql 诊断利器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591664/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaWeb连接MySQL数据库

    JavaWeb连接MySQL数据库 JavaWeb连接MySQL数据库的方式有很多,首先我们讲解JDBC的配置方法 一、JDBC的配置方法 1、什么是JDBC 什么是JDBC嘞?J…

    数据库 2023年5月24日
    065
  • vue导入UEditor报错问题分析

    直接上报错信息,如下。。。。 1.看看js是否导入 2.看看ue是否加入 F12 控制台输入则可看见那就是导入了,不是这个问题。 在查看问题的目标方向……….

    数据库 2023年6月6日
    0124
  • 没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!

    文末 JVM 思维导图,有需要的可以自取 熟知并发编程的你认为下面这段代码的执行结果是怎么样的? 我如果说,执行流程是: t1 线程和 t2 线程一直执行 num 的累加操作 主线…

    数据库 2023年6月16日
    090
  • IO流思维导图

    IO流思维导图 IO思维导图总结 总览: 1.文件 public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 (几乎…

    数据库 2023年6月16日
    084
  • Java泛型用法总结

    普通泛型 <span class="kwd"><span class="kwd">class<span cla…

    数据库 2023年6月16日
    060
  • Matery主题自定义(一)黑夜模式

    黑夜模式 作为一个前端学习者,自然懂得黑夜模式的重要性,可惜主题原生未提供,那就自己弄吧 参考其他优秀产品的黑夜模式,得出共性: 那就是黑夜模式的背景一般不会是纯黑(#000);而…

    数据库 2023年6月16日
    064
  • ORA-01950: no privileges on tablespace ‘USERS’– 解决办法

    ORA-01950: no privileges on tablespace ‘USERS’ 原因: 在表空间 “USERS” 无权…

    数据库 2023年6月14日
    095
  • 【数据结构】跳表

    一、基本概念 1.1 定义 跳表(SkipList):增加了向前指针的链表叫做指针。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。…

    数据库 2023年6月11日
    076
  • 项目中所用到的mysql重复过滤

    问题:首先用户会本地上传一批号码(可能重复)到我们项目,通过解析文件,把号码入库(只验证是不是号码其他不做改动)到号码表,然后对号码进行去重操作. 表结构为:主键(id),号码(m…

    数据库 2023年6月11日
    068
  • pg substring 正则提取子串

    官方案例: 测试: posted @2022-02-08 19:48 cheng_blog 阅读(218 ) 评论() 编辑 Original: https://www.cnblo…

    数据库 2023年6月16日
    080
  • 打破千篇一律,DIY属于自己独一无二的商城

    随着线上购物成为了人们的主要消费之一,搭建商城系统也成为一大热门的发展方向,在现在的电商市场中,经营的主体规模非常庞大,各种各样的电商系统琳琅满目,但是只要仔细观察就会发现,有很大…

    数据库 2023年6月14日
    090
  • 刚入职没多久,连夜手写了一个代码生成器,项目开发速度瞬间屌炸了!

    一、简介 最近刚入职一个新团队,还没来得及熟悉业务,甲方爸爸就要求项目要在2个月内完成开发并上线! 本想着往后推迟1个月在交付,但是甲方爸爸不同意,只能赶鸭子上架了! 然后根据业务…

    数据库 2023年6月14日
    095
  • Python–序列化与反序列化

    序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态(存在内存中)写入到临时或持久性存储区(硬盘)。以后,可以通过从存储区中读取或反序列化对象的…

    数据库 2023年6月9日
    091
  • Java面试题(四)–RabbitMQ

    1、MQ有哪些使用场景?(高频) 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。 系统解耦:比如用注册完成,再加…

    数据库 2023年6月16日
    068
  • Java 8的新特性还不了解?快进来!

    能坚持别人不能坚持的,才能拥有你想拥有的。关注 &#x7F16;&#x7A0B;&#x5927;&#x9053;,让我们一起成长 哈喽,大家好,我是…

    数据库 2023年6月11日
    066
  • 注解

    注解概述 从 JDK5 开始,Java 增加对 &#x5143;&#x6570;&#x636E;的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解…

    数据库 2023年6月15日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球