介绍

Yearning 自动化MySQL语句审核平台。提供查询审计,SQL审核,SQL回滚,自定义工作流等多种功能。

image.png

使用注意事项

  1. 需使用 1080p以上的分辨率显示器(对于设置页面配置重叠的问题请确认自己的分辨率以及是否进行了放大操作)
  2. 请使用chrome浏览器最新版本

功能简介

  1. 自动化SQL语句审核,可对SQL进行自动检测并执行
  2. DDL/DML语句执行后自动生成回滚语句
  3. 审核/查询 审计功能
  4. 支持LDAP登录/钉钉及邮件消息推送
  5. 支持自定义审核工作流
  6. 支持细粒度权限分配

    技术栈

  7. 后端:Go

  8. 前端:vue
  9. 解释器:Mysql语法树

兼容性

Yearning 目前兼容99%的Mysql 标准SQL语法。 但由于审核逻辑等因素的限制,对一些SQL语句并不能保证得到正确的反馈 已知不支持的语句类型有

  1. 复杂的查询语句(多表,多函数,非必现。并不是所有复杂语句不支持)
  2. 外键相关语句
  3. 不支持跨库DML语句的回滚
  4. 存储过程/触发器

安装Yearning

使用 docker 安装

  1. docker run -d -it -p8000:8000 -e MYSQL_USER=root -e MYSQL_ADDR=10.0.0.3:3306 -e MYSQL_PASSWORD=123123 -e MYSQL_DB=Yearning test/yearning

使用二进制包安装

下载地址 https://github.com/cookieY/Yearning/releases

image.png

直接运行 yearning 即可

配置Yearning

通过修改conf.toml文件我们可以配置数据库等信息
image.png

  1. [Mysql]
  2. Db = "Yearning"
  3. Host = "127.0.0.1"
  4. Port = "3306"
  5. Password = ""
  6. User = "root"
  7. [General]
  8. SecretKey = "dbcjqheupqjsuwsm"
  9. Hours = 4

SecretKey

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

    注意事项

    mysql 版本必须为5.7及以上版本(8.0及以上请将sql_mode 设置为空)并已事先自行安装完毕且创建 Yearning 库,字符集应为 UTF8mb4

Yearning命令

帮助

  1. ./Yearning --help

初始化安装

  1. ./Yearning install

如要再次安装,请先把 yearning 库下所有表删除,否则重复执行无效

默认启动

  1. ./Yearning run

指定端口启动

  1. ./Yearning run --push "127.0.0.1" -port "8000"

更新

  1. ./Yearning migrate

主要功能

SQL 查询

  1. 查询工单
  2. 导出
  3. 自动补全,智能提示
  4. 查询语句审计
  5. 查询结果脱敏

    SQL 审核

  6. 流程化工单

  7. SQL语句语法检测
  8. 根据规则检测SQL语句合规性
  9. 自动生成DDL/DML回滚语句
  10. 历史审核记录

    推送

  11. E-mail 工单推送

  12. 钉钉 webhook 机器人工单推送

    用户权限及管理

  13. 角色划分

  14. 基于用户的细粒度权限
  15. 注册

    其他

  16. todoList

  17. LDAP 登录
  18. 动态审核规则配置
  19. 自定义审核层级

    AutoTask 自动执行

用户权限

Yearning中用户先以角色的形式分为三大类,分别为 提交人/操作人/超级管理员。其中超级管理员角色为可见管理页面角色, 提交人/操作人为非可见管理页面角色。通过角色Yearning在细粒度权限划分之前先将用户分类。使管理类权限不会出现在使用者细粒度权限划分中
可根据每个用户的实际需求配置相应ddl/dml/查询数据源。每一类权限相互独立互不干扰。

权限种类

主要分类角色权限细粒度权限两大类

角色权限

角色权限: 提交人/操作人/超级管理员 该权限主要用来划定各用户权限边界并规定功能入口

细粒度权限

细粒度权限: DML/DDL/查询的数据源访问权限,查询上级审核人

如何分配权限

角色权限

超级管理员在新建用户时可自行设置对应角色。LDAP用户登录默认第一次登录均为提交人角色。可在登录后由超级管理员修改角色(必须在赋权之前确定好用户的角色)

细粒度权限

超级管理员建立权限组并将单个或多个权限组赋予用户,使用户继承权限组的细粒度权限。

注意事项

  1. Yearning没有初始超级管理员权限
  2. 新建用户同样不具备任何权限
  3. 任何操作都必须在赋予对应的权限之后才能执行

开始使用

创建用户并确认其角色

创建用户

在Yearning中用户可以通过以下方式创建:

  1. 在 管理->用户 页面admin用户自行创建用户。
  2. 打开 管理->设置 页面中的允许注册配置并保存。 由注册人自行点击yearning登录页面左上角注册按钮进行注册。
  3. 配置 管理->设置 页面中的Ldap的信息并保存。 ldap用户可在yearning登录页面中勾选ldap登录进行用户注册/登录操作。

image.png

创建角色

Yearning的用户角色分别为:提交人,操作人,超级管理员(仅admin用户) 三类。

  1. 提交人: 仅拥有提交的工单,查询的功能
  2. 操作人: 在提交人权限的基础上,拥有审核/执行工单的功能
  3. 超级管理员: 在前两者的权限基础上,拥有平台管理/配置/审核规则设置等管理员权限。

image.png

对于除了admin用户以外的所有用户,在创建账号时(通过注册/ldap登录)统一为提交人角色。如需更改角色应由admin用户通过 管理->用户 页面进行更改。

创建权限组并将权限组赋予给对应的用户

通过管理->权限组 页面,admin可以创建/编辑/删除权限组。权限组提供了多种细粒度的权限管控(yearning目前权限管控仅下沉到数据源级别)如下所示:

  1. 允许DDL工单提交的数据源范围
  2. 允许DML工单提交的数据源范围
  3. 允许查询工单提交的数据源范围
  4. 查询的上级审核人范围

创建完权限组后请通过管理->用户页面,选择你需要赋予权限组的用户点击该用户对应的权限按钮进行权限组赋权。

image.png

注意

  1. 一个用户可以被赋予多个权限组,多权限组下该用户会集成2个权限组的全部权限
  2. 一个权限组也可以对多个用户进行赋权

添加数据源信息

通过管理->数据库 页面,admin可以创建/编辑/删除数据源。数据源为一个Mysql实例,数据库共分为读/写/读写三大种类。如果希望该数据源既可处理DDL/DML工单又能进行查询则该数据源应设置为读写,反之根据自己的需求可以设置为读/写

image.png

注意事项

Yearning不支持一些特殊字符串例如@,这是由于转义以及可能会带来的pt-osc执行错误而不得不规避的问题,建议用户单独创建一个新的mysql用户用来对接Yearning平台

为环境创建自定义审核规则

通过管理->流程 页面,admin可以编辑环境的流程。
Yearning以环境为单元,可对不同的环境配置不同的审核流程。
Yearning 最多支持7层的审核流程,但必须注意的是流程的开头必然是提交人阶段,流程的结束必然是执行阶段。否则将会导致流程错乱!
更改流程时请确保该环境下的工单都已处理完毕,否则可能会引起流程错乱!
如没有将对应环境配置流程则用户无法对这个环境进行任何DDL/DML工单提交操作

image.png

在设置页面配置各项配置信息

通过 管理->设置 页面,admin可以配置Yearning的多项配置。
这里将介绍几个重点配置:

  1. 查询limit上限: 该设置为 全局查询 最大的limit限制,默认为1000.这意味着通过Yearning进行的查询最多只会查询1000条,如需提高此阀值可直接修改这个配置。(DML/DDL的影响行数上限不受此规则限制,如需对DML/DDL影响行数上限进行修改请前往审核规则页面进行配置)
  2. 添加环境: 默认Yearning仅提供aws/aliyun 两个环境,用户可自行添加或删除环境,添加完对应的环境后请及时前往流程模板页面添加该新环境的流程模板。

image.png