SQL 审核平台 yearing 安装部署使用与注意事项

安装注意事项

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

仅依赖 Mysql 数据库。

mysql 版本必须5.7及以上版本,请事先自行安装完毕且创建 Yearning 库,字符集应为 UTF8mb4 (仅 Yearning 所需 mysql 版本)

Yearning 日志仅输出 error 级别,没有日志即可认为无运行错误!

Yearning 基于 1080p 分辨率开发仅支持 1080p 及以上显示器访问

由于使用较多新的前端技术栈,请使用 Chrome 最新版本(不包括 360 等其他魔改版本)

Yearning 下载

Yearning-go 提供二进制下载包

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

请选择最新版本 在 Assets 中选择 Yearning-x.x.x.linux-amd64.zip 包进行下载

如需进行代码修改或自己编译请移步至二次开发页面

Yearning 目录结构

img

1.填写配置文件

cat conf.toml
[Mysql]
Db = "Yearning"
Host = "127.0.0.1"
Port = "3306"
Password = "xxxx"
User = "root"

[General]   #数据库加解密key,只可更改一次。
SecretKey = "dbcjqheupqjsuwsm"

关于 SecretKey

SecretKey 是 token/数据库密码加密/解密的 salt。

建议所有用户在初次安装 Yearning 之前将 SecretKey 更改(不更改将存在安全风险)

格式: 大小写字母均可, 长度必须为 16 位 如长度不是16位将会导致无法新建数据源

特别注意:

此 key 仅可在初次安装时更改!之后不可再次更改!如再次更改会导致之前已存放的数据源密码无法解密,最终导致无法获取相关数据源信息

使用帮助

./Yearning -h

img

2.初始化数据结构

./Yearning -m

请务必在-s 启动前首先执行-m 初始化操作!

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

3.启动服务

默认启动

./Yearning -s

参数启动

./Yearning -s -b "172.27.80.35" -p "8000"

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

默认账号/密码:admin/Yearning_admin

二次开发如何使用

  1. 初始化Yearning
  2. 启动juno(可以通过-p 指定端口 默认端口为50001)
  3. 填写conf.toml内GrpcAddr参数(默认127.0.0.1:50001)
  4. 进行调试

注意

juno与Yearning 必须共用同一个数据库且共用同一份配置文件(如juno与Yearning不在同一台主机,则需拷贝一份cofnig.toml文件与juno放在同级目录。且Yearning项目内的config.toml文件中GrpcAddr配置项填写为juno所在主机的ip及端口)

由于当前juno仅只有linux版本,建议基于mac/windows平台开发的开发者使用docker启动juno。

调用传参

syntax = "proto3";
package proto;


message LibraAuditOrder {
    string SQL = 1;
    string DataBase = 2;
    string Table = 3;
    bool Execute = 4;
    bool Check = 5;
    bool IsDML = 6;
    bool Backup = 7;
    Source source = 8;
    string WorkId = 9;
    bool IsAutoTask = 10;
    string Name = 11;

}

message Source {
    string Addr = 1;
    string User = 2;
    string Password = 3;
    int32 Port = 4;
}

message Record {
    string SQL = 1;
    int32 AffectRows = 2;
    string Status = 3;
    string Error = 4;
    int32 Level = 6;
}

message RecordSet {
    repeated Record record = 1;
}

message ExecOrder {
    string Message = 1;
}

message Isok {
    bool Ok = 1;
}
message InsulateWordList {
    repeated string InsulateWordList = 1;
    string SQL = 2;
}

service Juno {
    rpc OrderDeal (LibraAuditOrder) returns (RecordSet) {
    }
    rpc OrderDMLExec (LibraAuditOrder) returns (ExecOrder) {
    }
    rpc OrderDDLExec (LibraAuditOrder) returns (ExecOrder) {
    }
    rpc AutoTask (LibraAuditOrder) returns (Isok) {
    }
    rpc Query (LibraAuditOrder) returns (InsulateWordList) {
    }
    rpc KillOsc (LibraAuditOrder) returns (Isok) {
    }
}

服务更新

Yearning采用自动表结构同步 无需手动更新表结构。只需停止原服务并替换安装包后重新启动即可(需将dist目录以及Yearning二进制文件都进行替换)

如遇删除字段操作的变动需要执行以下命令。具体是否需要做此操作,请详见相应版本的更新公告(目前该情况只出现于2.1.0以下版本升级到2.1.0以上版本)

./Yearning -x

对于2.3.0以下版本升级到2.3.0以上版本的操作,在执行完替换与启动之后,还需执行以下命令。

./Yearning -k

容器化

注意

Yearning安装包内已含有Dockerfile文件,可直接进行build打包成镜像

Yearning 从v2.0.4版本开始支持环境变量传参

容器启动时可通过环境变量的方式传入数据库地址。

如下所示

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

特别注意

语法支持

Yearning 目前兼容99%的Mysql 标准SQL语法。

但由于审核逻辑等因素的限制,对一些SQL语句并不能保证得到正确的反馈

已知不支持的语句类型有:

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

影响行数

Yearning采用Explain分析SQL语句的影响行数。由于Explain生成的影响行数受主键,索引等其他因素的影响,并不能100%保证其准确性。其更多的是反应了该语句导致的全表扫描行数,所以对于误差较大的语句具有一定的优化参考意义。

预检查

Yearning采用预检查的方法进行SQL检测,对于同一工单内添加并编辑的语句会产生字段不存在的错误。(在2.3.0版本开始将逐步兼容)

例如

ALTER TABLE core_data_sources ADD t1 int( 11) DEFAULT 0 COMMENT '已退换货数量';
ALTER TABLE core_data_sources ADD t2 int( 11) DEFAULT 0 COMMENT '申请中数量' AFTER t1;

该工单第二条语句依赖第一条语句创建的字段。由于当前数据库并没有t1这个字段,所以该工单检测时会报错t1字段不存在的问题。

语句本身没有问题因为在mysql执行中是逐条执行并检测。当第一条执行后表内生成该字段,第二条执行前检测自然也就正常。

使用osc

Yearning采用exec调用pt-osc的方式使用pt功能。管理员需在规则设置页面中填写相关pt-osc配置,并打开osc使用开关。 需要注意的是,使用pt-osc的DDL语句不得含有 dbname.tablename 这样的写法!请符合pt-osc写法!

生成回滚语句

Yearning 采用解析binlog方式的方式获得回滚语句。由于Mysql replication协议限制,必须拥有SUPER/REPLICATION SLAVE, REPLICATION CLIENT ,ALL PRIVILEGES 权限的账号才可以获得binlog流。所以,如想体验生成回滚语句备份功能,请确保对应填写的数据源账号拥有相应权限,同时对应数据源应开启binlog功能。

2.1.7版本及以上权限设置

理念

Yearning自2.1.7版本之后采用权限组的方式进行权限授权,权限最低下放至数据源。

Yearning中用户先以角色的形式分为三大类,分别为 使用者/管理员/执行人。其中管理员/执行人角色为可见管理页面角色, 使用者为非可见管理页面角色。通过角色Yearning在细粒度权限划分之前先将用户分类。使管理类权限不会出现在使用者细粒度权限划分中

可根据每个用户的实际需求配置相应ddl/dml/查询数据源。每一类权限相互独立互不干扰。

Yearning没有初始超级管理员权限

首次使用Yearning时超级管理员本身也不具备对应的细粒度权限,需自行配置。 新建用户同样不具备任何权限。任何操作都必须在赋予对应的权限之后才能执行。所以请在使用之前赋予用户权限!

特别注意

基于权限组的权限划分模式可提高权限复用性,减少重复赋权操作。但需要注意的是:由于角色的不同会导致管理员与使用者显示的页面不同,所以当给予使用者的权限组中含有管理员权限时,使用者并不会因为含有管理员权限而角色变更为管理员。所以请超级管理员合理划分权限组。确保同一角色用户只能获得该角色应有权限的权限组。

设置用户权限

1.超级管理员可在权限组页面创建相应权限组,并赋予权限组相关权限。

2.超级管理员在用户权限页面中选择用户并赋予权限(单个用户可授予多个权限组且当权限组权限重复时自动去重)

审核流程

注意

  • Yearning采用自定义层级的审核模式,可根据实际需求变更相关使用流程
  • 如果需更改审核层级,请先确保更改前的工单都已确认执行。否则未执行工单将无法找回。

层级设置

超级管理员在管理-流程模板页面对每一个数据源进行流程配置。 使用角色为操作人的用户才能作为审核/执行人

需要注意的是

1.中间审核人最多支持5层。(等于最大7层步骤 提交步骤->审核人五层->执行步骤)

3.仅允许一个执行阶段! 请将审核阶段的参数添加在执行阶段之前。

4.特别注意,如对现有流程进行更改。请确保当前流程下所有工单都已执行完毕,否则将会导致未执行工单流程错乱!

常见问题

  • 为什么数据源下拉列表框没有添加的数据源信息?

    没有将添加的数据源赋予该用户

  • 为什么给用户添加了数据源权限仍然看不见该数据源?

    在添加数据源时请注意 是否为数据源单选框,如选择为是,该数据源只会在出现在查询选择范围反之只会出现在ddl/dml选择范围中

  • 为什么没有备份库设置,需不需要安装inception?

    Yearing 2.0 采用自主审核引擎无需安装任何第三方审核工具,不需要额外添加备份数据库

  • 为什么没有回滚语句?

    Yearning基于binlog row格式生成回滚语句 请确定目标数据库已开启binlog (binlog格式从v2.0.1版本开始自动设置)/目标表是否存在主键

  • 为什么有些页面打开报错接收不到数据,而且后台也无错误日志信息?

    由于yearning使用es6规范语法编写。仅支持现代浏览器,请升级你的浏览器,推荐使用chrome最新版进行体验

  • 为什么复杂的查询SQL会报错?

    对于复杂的函数查询SQL由于语法解释器尚不支持,无法解析

各模块注意事项

我的工单

  • 对于执行失败/驳回的工单点击执行信息后可以重新修改sql并提交
  • 对于执行成功的工单可以点击执行信息查看回滚语句并且快速提交SQL

提交工单-DDL

  • 如果想获取表结构详细信息,必须选填表名并完整填写工单信息。
  • 所有的SQL只有在检测后错误等级为0时提交按钮才会激活。
  • 如下拉列表框内没有相关数据源显示请联系管理员是否赋予相应数据源权限

提交工单-DML

  • 查询语句请走查询页面不要将查询语句放入DML审核

查询

  • 如果开启查询审核,提交该查询申请后需对应审核人同意后方可查询。
  • 超级管理员在设置页面开启数据导出功能后,查询申请页面才会显示数据导出按钮
  • 由于导出数据为.csv格式 如导出数据中有json等以含有逗号的数据会造成数据分隔异常的问题(csv 默认使用逗号分隔)
  • 获取表结构功能必须点击相应表名此为前置条件
  • 快速提交功能仅支持同查询数据源的DML语句(查询数据源必须为读写类型)
  • 如下拉列表框内没有相关数据源显示请联系管理员是否赋予相应数据源权限

工单审核

  • 实时刷新开关默认打开,如需删除记录请先关闭该开关。
  • 如定时工单的时间小于当前时间,执行该工单将会立即执行(请确保Yearning所在环境时区与使用者时区一致,否则会导致定时执行异常!)
  • 目前仅支持延时工单中止,其他工单执行后无法中止!
  • 执行成功的工单可点击执行信息按钮后查看回滚语句

查询审核

  • 点击全部中止按钮将会中止所有用户的查询权限 如没有在设置页面开启查询审核开关,则默认用户查询申请提交后自动获得查询权限。 用户查询时限请在设置页面进行设置。
  • 点击清除空查询工单,可删除无查询记录的空查询工单(此情况多发生于用户申请了查询工单后并没有查询的情况)

用户管理

  • 当多级审核关闭后系统并不会自动将角色为执行人的用户重置角色,请自行重置相应用户角色。

数据库管理

  • 所有添加的数据源应在添加之前点击测试连接按钮进行连接性测试,保证连接性。
  • 数据源分为查询数据源/非查询数据源/读写数据源。查询数据源仅会出现在细粒度权限的查询数据源范围内。非查询数据源同理。(对于查询与执行数据源应拆分为二,保障线上执行数据源不会因为查询慢sql影响业务)默认为读写数据源。此类别添加后无法通过编辑进行修改,请慎重添加。
  • 数据源详细信息处密码为假密码展示并不会回传真实密码信息(并不妨碍编辑修改密码)确保安全性

设置

  • ldap设置请参考 yearning ldap配置
  • 目前ldap并没有实现基于filter的过滤搜索,仅支持全局搜索。
  • 由于ldap测试并没有进行dc搜索(管路员用户并不需要dc搜索),所以测试成功并不代表ldap用户100%可访问.即填对了ldap管理员用户信息但SCBASE信息填写有误.
  • 目前脱敏规则为无差别化脱敏,不管查询什么库只要该字段符合脱敏规则就会自动隐式显示
  • 输入框配置,必须点击添加按钮,使配置添加后保存才生效。
  • 所有设置均即时生效,其他用户刷新页面后即可。

审核规则

  • 数值型规则0值都为不受限制。
  • 开启检查时间字段默认值,所有时间类型字段都必须设置默认值且默认值必须为CURRENT_TIMESTAMP
  • osc相关规则请参考相关工具参数说明。
  • OSCMinTableSize当表体积大于该值时如果启动osc则走osc执行。
  • 受制于各种条件影响, 影响行数判断并不一定准确,走主键及索引的语句会提交准确性,仅作为部分参考,如预测结果偏移量较大。可考虑语句性能是否存在可优化空间或提高影响行数上限。(影响行数基于explain)
  • 文本类型输入框填写多值时请使用英文逗号分隔 (例如:charset范围,collate范围)

AutoTask

  • 用户可通过改功能设置自动执行任务。当提交的dml语句符合相应任务条件。将会自动执行,无需审核人审核。
  • 该功能仅限dml语句使用。请慎重使用!
Copyright © 2009 - Now . XPBag.com . All rights Reserved.
夜心的小站 » SQL 审核平台 yearing 安装部署使用与注意事项

提供最优质的资源集合

立即查看 了解详情