SQL审核 | SQLE 如何开发一条自定义的规则

linux rocky9.2系统搭建sqle数据库审核平台 linux rocky 9.2系统安装sqle SQL语句质量审核平台,包含数据库安装,下载包,均来自官方网站提供,可以参考安装更高版本,无隐含技术,全提供。 阅读详情

作者:Jason

就职于捷信消费金融有限公司,担任 DBA 工作。先后从事过 Oracle 、Mongo 、MySQL 的 DBA ,以及大数据 ETL 的开发工作。对 NEWSQL 以及云原生分布式数据库具有浓厚的兴趣爱好。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


SQLE 是由上海爱可生信息技术股份有限公司 开发并开源,支持SQL审核、索引优化、事前审核、事后审核、支持标准化上线流程、原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

官方主页 https://opensource.actionsky.com/sqle/

官方文档 Introduction · SQLE manual (actiontech.github.io)

(!!!事先声明:二次开发纯属于个人技术研究,不得进行任何商业盈利行为)

大家好! 本次来分享的是如何开发一条自定义的review rule 的规则(基于MySQL 5.7的语法)。

在开发代码前,我们先从后台API调用的角度梳理一下审核SQL的具体流程:

我们可以先用 POSTMAN 从调用一遍代码审核这个方法:

首先,先确定规则验证的API接口:
http://10.25.15.83:10000/v1/tasks/audits

与API相对应的源代码方法的入口是:
api.controller.v1.task.go --> func CreateAndAuditTask(c echo.Context)

由于系统做了JWT的登录验证, 我们需要先模拟一下登录:

1)调用登录的API 10.25.15.83:10000/v1/login,获得token: ****************************

默认的是 admin/admin ,登录成功后,我们可拿到 token

2)我们调用一下规则验证的API接口: http://10.25.15.83:10000/v1/tasks/audits

我们准备了一下简单的SQL语句:

create table test (id int not null, name varchar(20));

这个语句不符合审计的规则如下:
1)无主键
2)无列和表级别的comment
3)无innodb engine 指定

我们首先设置参数: 可以参考request的结构体。

type CreateAuditTaskReqV1 struct {
   InstanceName   string `json:"instance_name" form:"instance_name" example:"inst_1" valid:"required"`
   InstanceSchema string `json:"instance_schema" form:"instance_schema" example:"db1"`
   Sql            string `json:"sql" form:"sql" example:"alter table tb1 drop columns c1"`
}

参数1: InstanceName -》 DBA
参数2: instance_schema =》 testdb
参数3: sql =》 create table test (id int not null, name varchar(20));

我们还需要设置一下 token: 这个token 从登录的API返回值可以获取到

下面我们尝试调用一下审计接口:http://10.25.15.83:10000/v1/tasks/audits

我们来看一下返回给我们的response的含义 :

{
   "code": 0,
   "message": "ok", --表示api调用成功
   "data": {
       "task_id": 1,  --返回的审核结果保存在 task_is =1的任务中
       "instance_name": "DBA", --实例名
       "instance_schema": "testdb", --DB名
       "audit_level": "error", --ERROR 级别的错误
       "pass_rate": 0,  --通过率为0
       "status": "audited", --已经审计的状态
       "sql_source": "form_data" --直接获得SQL语句的方式
   }
}

我们要想知道具体的审计返回的结果需要查询数据库: (“task_id”: 1, --返回的审核结果保存在 task_is =1的任务中)

mysql> select  audit_result from execute_sql_detail where task_id=1\G
*************************** 1. row ***************************
audit_result: [notice]列建议添加注释
[error]表必须有主键
[notice]必须使用Innodb数据库引擎
[notice]表建议添加注释
1 row in set (0.00 sec)

从 response 的信息来看 是完全符合我们之前的预期的结果。

下面我们要代码的角度追踪一下这个审计的整个流程:
SQLE 采用的是类似数据库driver插件的开发模式,接口 driver.go 已经定义好了抽象的函数,具体的实现需要每一种具体的数据库来完成
例如 mysql.go, oracle.go

下面是如何添加一条新的rule 到审核平台的具体步骤:

New Rule的规则是:
我们想要在新建的TABLE 表中必须含有指定的列, 像是cdate cdate,creator,edate,editor 这几个审计字段。

首先找到对应的数据库里面rule的表是 rule:

mysql> select * from rules \G
*************************** 28. row ***************************
  name: ddl_check_object_name_using_keyword
db_type: mysql
  desc: 数据库对象命名禁止使用保留字
 level: error
  type: 命名规范
params: NULL
*************************** 29. row ***************************
  name: ddl_check_pk_name
db_type: mysql
  desc: 建议主键命名为"PK_表名"
 level: notice
  type: 命名规范
params: NULL

....

我们来手动插入一条新rule的记录:

mysql> INSERT INTO sqle.rules
   -> (name, db_type, `desc`, `level`, `type`, params)
   -> VALUES('ddl_check_audit_column', 'mysql', '建表语句需要包含4个审计列(cdate,creator,edate,editor)', 'notice', '命名规范', NULL);
Query OK, 1 row affected (0.00 sec)


mysql> commit;
Query OK, 0 rows affected (0.00 sec)

我们可以从页面看到这条新加的规则已经出现在了列表里面:

我们把这条新的规则追加到我们自定义的规则模板中:

最后一步,提交规则的模板信息。

下面我们从页面上测试一下我们新加的规则:(当然了,对应的规则要添加对应的后台代码,这个后面会有介绍~)

我们新建一个审核任务:

输入建表语句:

create table test (id int not null, name varchar(20));

点击审核按钮

我们可以看到我们自定义的审核规则已经生效:

最后我们来看看后台代码是如何开发实现这个规则的:

后台对应的这条规则的逻辑代码是:(入门级别的简单代码)这段代码加入到 sqle/driver/mysql/rule/rule.go中
用Map的结构体来判断,必要的列的名字是否存在review 语句的表中

//可以在linux下进行命令行的代码单元测试
// dlv test github.com/actiontech/sqle/sqle/driver/mysql -- -test.run ^TestCheckAuditColumn$
func checkAuditColumn(ctx *session.Context, rule driver.Rule, res *driver.AuditResult, node ast.Node) error {
   var auditCols = [4]string{"cdate","edate","creator","editor"}
   var set map[string]struct{}
   set = make(map[string]struct{})
   for _, value := range auditCols{
      set[value] = struct{}{}
   }
    var cnt int = 0
   switch stmt := node.(type) {
   case *ast.CreateTableStmt:
      for _,value := range stmt.Cols {
         fmt.Println(value.Name.Name)
         if _, ok := set[value.Name.Name.String()];ok {
            cnt++
         } 

      }
   if cnt != 4{
      addResult(res, rule, rule.Name)
   }  


   }


   return nil
}

同时我们添加rule的mapping 规则: sqle/driver/mysql/rule/rule.go中

{
   Rule: driver.Rule{
      Name:     DDLCheckAuditColumn,
      Desc:     "建表语句必须包含审计列(cdate,creator,edate,editor)",
      Level:    driver.RuleLevelError,
      Category: RuleTypeUsageSuggestion,
   },
   Message:      "建表语句必须包含审计列(cdate,creator,edate,editor)",
   AllowOffline: true,
   Func:         checkAuditColumn,
},

添加常量定义: sqle/driver/mysql/rule/rule.go中

DDLCheckAuditColumn                         = "ddl_check_audit_column"

我们还可以在 sqle/driver/mysql/audit_offline_test.go 进行unit testing:

func TestCheckAuditColumn(t *testing.T) {
   fmt.Println("start..............")
   runSingleRuleInspectCase(rulepkg.RuleHandlerMap[rulepkg.DDLCheckAuditColumn].Rule, t,
      "create table test (id int not null, name varchar(20));  ",
      DefaultMysqlInspectOffline(),
      `create table test (id int not null,
                                name varchar(20),
                                cdate datetime,
                                edate datetime,
                                creator1 varchar(20),
                                editor1 varchar(20));`,
      newTestResult().addResult(rulepkg.DDLCheckAuditColumn),
   )
}

最后测试通过后,我们即可提交代码,发布新的程序来从页面上验证我们自己定义的规则了。

总体来说,爱可生的代码是十分规范的,便于二次代码开发和维护。如果你是golang的开发爱好者,亦可作为学习项目的经典案例。

【WRF湿度调整策略】WRF/ERA5湿度数据对比 阅读详情

相关推荐

2022-04-06 RK3566 上调试百兆以太网卡YT8512C 调试记录

一、原理图 二、dts &gmac1_clkin{ clock-frequency = <50000000>; status = "okay"; }; &gmac1 { phy-mode = "rmii"; clock_in_out = "input"; snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; sn...

海月汐辰 1万+

oracle sqla工具,Oracle SQL自动化审核工具的实现

作者介绍梁铭图,新炬网络首席架构师,十多年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP以及华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。一、背景我们客户现场的Oracle运维团队需要对开发团队提交上...

weixin_31182871的博客 1223

OCC入门指南:从零开始掌握Open CASCADE Technology

本文是Open CASCADE Technology(OCC)的入门指南,详细介绍了这款开源C++三维几何建模内核的核心概念与价值。内容涵盖从零开始搭建开发环境、编写第一个显示立方体的程序,到深入理解其几何与拓扑核心、掌握Draw测试工具及Handle内存管理等关键编程范式,旨在帮助开发者快速掌握这一工业级CAD/CAE/CAM应用开发利器。

java5的博客 1275

Archery: 一款超强大的在线 SQL 审核平台,爆赞推荐

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !今天给大家推荐一个关于 SQL 审核平台的开源项目,这个开源项目叫:Archery, 是 archer 的分支项目,定位于 SQL 审核查询平台,旨在提升 DBA 的工作效率,支持多数据库的 SQL 上线和查询,同时支持丰富的 MySQL 运维功能,所有功能都兼容手机端操作这个开源项目,采用...

easylife206的专栏 4097

AI学习记录 - transformer的位置编码的理解

先看三角函数为什么可以,我们看下三角函数的图像先提一个点:位置信息肯定是唯一的,或者是在很长的文字当中,起码重复度不会太高,x轴代表位置,y轴代表叠加上去的值1、假设只使用一个三角函数sin,我们将第2和第14两个位置输入到sin,他们的值很像,在神经网络的训练中,很容易把第2个位置和第14个位置当成是一个位置,不满足我们上面说到的要求位置唯一性。sin2sin14。

weixin_43954090的博客 1412

iStoreOS路由器(openwrt软路由) AdGuard Home 客户端 IP 总是 localhost(127.0.0.1)?这样设置让你精准识别真实IP!

在iStoreOS等软路由上部署AdGuard Home时,客户端IP常显示为localhost(127.0.0.1)。本文详细介绍如何让adguardhome直接识别客户端真实IP🌐,帮助你实现网络流量的精准追踪和管理。🔍

XiaoqiangClub的博客 2249

转://从一条巨慢SQL看基于Oracle的SQL优化

http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划、如何从执行计划中找到SQL执行慢的Root Cause、统计信息与cardinality问题、探索性能杀手Filter操作、如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够...

weixin_33858336的博客 359

Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)

目录 文章目录目录摘要 摘要 本节主要记录自己学习IO与FMU通信

陌城烟雨 2800

SQL数据库编写存储过程

推荐阅读:https://www.cnblogs.com/Brambling/p/6725859.html 程序获取数据库数据(后端)代码编写的两种方法,一是利用编程语言直接将SQL 语句以字符串的形式向数据库发送命令;二是将各种对数据库的操作命令存储在数据库中,利用编程语言来调用这些存储过程。 第二种方式优势明显。 存储过程的优势: 提高了程序的通用性和可移植性;可以重复调用,随时对存储...

硬核小青年的博客 4045

全能媒体工具深度测评(下篇一):AI图文生成+全能解压+图片去文字,一键搞定素材精修

解压50多种格式,文生图,图生图

cs821984831的博客 40

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2387

sql存储过程学习实例

什么是存储过程呢? 定义: 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊? Microsoft公司为什么还要添加这个技术呢? 那么存储过程与一般的SQL语句有什么区别呢?

u010361662的专栏 535

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2626

SQL审核 | 如何使用 SQLE 进行开发阶段 SQL审核

作者:孙健 孙健,爱可生研发工程师,负责 SQLE 相关开发; 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、 SQLE 介绍 SQLE 是一款由爱可生开源社区发起,面向数据库开发与管理人员,实现了 SQL 的「开发」-「测试」-「上线」等全流程覆盖,资源与权限精细化管理,兼顾简洁与高效,易维护、易扩展的的开源项目,旨在为用户提供一套的安全可靠、自主可控的 SQL 质量管控方案。 二、 功能介绍 SQLE 的开发阶段 SQL审核主要是通过 SQ.

ActionTech的博客 2376

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SQLE、SQM和PawSQL:企业级SQL审核平台的深度评测

市场上主流的SQL审核工具,Yearning、Archery、Bytebase的审核模块、爱可生的SQLE、云和恩墨的SQM等,在规则覆盖度、或是正确率等方面存在明显不足,导致企业在引入产品后难以进行落地;PawSQL通过设计理念和核心技术的突破性创新,推出了自己的企业级SQL审核平台。 本次我们将深度评测这几款市场上主流SQL审核工具在审核规则覆盖度和审核结果正确性方面的表现。

PawSQL的博客 1990

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SQLE、SQM和PawSQL:深度评测企业级SQL审核平台

SQL审核是SQL代码投入生产的最后一道关卡,选择正确的SQL审核工具对于确保确保SQL代码质量至关重要。本文深度评测市场上主流的SQL审核工具,Yearning、Archery、Bytebase的审核模块、爱可生的SQLE、云和恩墨的SQM等,在审核规则覆盖度和审核结果正确性方面的表现。评测结果表明,即使用MySQL规则集作为测试对象,PawSQL在这次测试中表现也是最佳。

PawSQL的博客 1606

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SQL审核 | SQLE-SQL审核平台体验报告

作者:刘新旺 MySQL DBA,专注于 MySQL 数据库多年,现就职一家本地生活服务类互联网公司,负责数据库相关工作。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来 源。 产品概述 体验环境 体验产品:SQLE 软件版本:sqle-ce-1.2111.0-pre2 部署环境:CentOS Linux release 7.9.2009 (Core) 产品介绍 SQLE( https://opensource.actionsk.

ActionTech的博客 1627

SQL审核 | 如何用 SQLE 自动审核 Java 应用

作者:孙健、张强 孙健,爱可生研发工程师,负责 SQLE 相关开发;张强:爱可生研发中心成员,后端研发工程师,目前负责 DMP 产品 Redis 相关业务开发。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一. SQLE 介绍 SQLE 是一款由爱可生开源社区发起,面向数据库开发与管理人员,实现了 SQL 的「开发」-「测试」-「上线」等全流程覆盖,资源与权限精细化管理,兼顾简洁与高效,易维护、易扩展的的开源项目,旨在为用户提供一套的安全可靠、自.

ActionTech的博客 1066

SQLe在SQL审核上的探索和实践

hi,大家好,欢迎来到3306π嘉宾专访板块,3306π北京站将于2021-08-21与大家相约。今天,我们将对本次《SQLe在SQL审核上的探索和实践》主题嘉宾孙健老师进行一个专题采...

老叶茶馆 750

SQL 审核神器:SQLE 3.0 部署实践

简介部分将介绍SQLE 3.0的特点、功能以及它在SQL审核中的作用。SQLE 3.0是一款强大的SQL审核工具,它通过对SQL语句进行静态分析和规则检查,帮助开发人员快速发现和修复潜在的SQL编码问题。本节将深入介绍SQLE 3.0的工作原理和优势,包括其高效的审核算法、智能提示功能以及可定制的审核规则。同时,我们将讨论SQLE 3.0的部署实践,包括在开发环境和生产环境中的安装和配置。最后,我们将对SQLE 3.0的使用场景和应用案例进行探讨,帮助读者全面了解和掌握这一SQL审核神器。​。

1387

SQL审核 | 如何快速使用 SQLE 审核各种类型的数据库

作者:孙健 孙健,爱可生研发工程师,负责 SQLE 相关开发; 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 前言 近些年来,数据库产业发展迅猛,各种新兴数据库如雨后春笋般出现,各个公司的技术栈也不再局限于某一种数据库。对于SQL质量管理平台来说仅支持某一个类型的数据库(例如MySQL),那么是会有一定的局限性,SQLE在设计之初考虑支持多种数据库,因此产品设计时,将审核流程(业务)的代码和具体SQL审核上线的代码进行分离,SQL审核上线通过插件的.

ActionTech的博客 987

1024 开源首发 | SQL 审核工具 SQLE

在 2017 、2018 年和 2019 年的 10 月 24 日,爱可生开源社区出品了 MySQL 分布式中间件 DBLE 、数据复制产品 DTLE 和全局事务框架 TXLE 。时隔两年,这三款产品在社区积累了更多的设计经验和用户反馈,有更多的企业和用户在生产环境中使用它们,实现了产品的快速迭代。 此次开源的 SQLE ,它是一款面向数据库使用者和管理者的 SQL 审核工具,旨在规范 SQL 审核上线流程,提高 SQL 质量。社区保持每年开源一款产品的传统,为丰富 MySQL 开源生态添砖加瓦。 SQ

ActionTech的博客 1235

SQL审核 | SQLE 兼容 MySQL 8.0 测评

作者:任仲禹 爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 目录 前⾔ DDL语句审核 DCL语句审核 DML语句审核 DDL与DML上下⽂关联 结论 前⾔ SQLE是由爱可⽣开发并开源、⽀持SQL审核、标准化上线流程等丰富功能的可扩展 SQL 审核⼯具(https://github.com/actiontech/sqle);⽬前⼤部分 MySQL 业务使⽤.

ActionTech的博客 1094

SQL审核 | SQLE 发布新插件,支持 PostgreSQL 审核功能

SQL审核工具 SQLE 1.2111.0-pre1 于今天发布。 注:本次升级为预览版本,仅可用新功能试用,不保证平滑升级 一、SQLE项目介绍 爱可生开源社区的 SQLE是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。 SQLE 获取 类型 地址 版本库 https://github.com/actiontech/sqle 文档 https://actiontech.gith..

q1472750149的博客 1436

SQLE:一个全方位的SQL质量管理平台

是一个全方位的 SQL 质量管理平台,致力于通过“建立规范、事前控制、事后监督、标准发布”的方式,帮助企业提升 SQL 质量与业务稳定性。

Tony.Dong的专栏 1456

SQL审核 | 这里有 MySQL/Oracle 最常用的 SQL 开发规则

SQL审核工具 SQLE 企业版近期推出了Oracle审核插件的第一个测试预览版。我们采集了过往我们在客户那碰到的问题和行业专家的建议,整理了一大批Oracle审核规则。这个版本我们从中挑选出现频次最高的以及影响范围最大一批规则加入到了Oracle审核插件中,这些规则能覆盖大多数客户的大多数场景,却又不会对客户使用产生额外的负担。在后续的时间内,我们将推出的Oracle审核插件逐步完善规则的拼图。接下来的内容将对高频规则给出我们的理解。插件的本身开发之前已经做过介绍,开发文档参考:https://actio

ActionTech的博客 754
上一篇: 技术分享 | tidb 2.1升级到4.0操作文档
下一篇: 数据传输 | 如何配合 pt-osc 使用 DTLE 同步 DDL
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值