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

eBPF专题二|史上最强SQL审核工具原理剖析(利用eBPF技术覆盖SQL性能的审核) 传统SQL审核是基于经验规则进行审核,但无法基于线上数据情况进行SQL性能评估,存在性能隐患。DBdoctor利用eBPF技术和外置Cost优化器,准确评估SQL真实性能,推荐最优索引。 阅读详情

作者:孙健

孙健,爱可生研发工程师,负责 SQLE 相关开发;

本文来源:原创投稿

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


前言

近些年来,数据库产业发展迅猛,各种新兴数据库如雨后春笋般出现,各个公司的技术栈也不再局限于某一种数据库。对于SQL质量管理平台来说仅支持某一个类型的数据库(例如MySQL),那么是会有一定的局限性,SQLE在设计之初考虑支持多种数据库,因此产品设计时,将审核流程(业务)的代码和具体SQL审核上线的代码进行分离,SQL审核上线通过插件的形式实现。SQLE对外提供插件开发所需的接口和库,可以快速创建开启一个审核插件,无需升级软件,导入审核插件即可获对应数据库类型的审核上线能力,使用平台所有功能。

插件的开发参考文档:https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html ,

插件的使用参考文档:https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_management.html。

本文将演示如何从零开始创建一个简单可用的审核插件,作为案例。

目标

首先将创建一个 Postgres 数据库审核插件,并添加两条规则,“禁止使用 SELECT *”和“创建的表字段过多”,并在开发过程中结合SQLE对Postgres数据库进行SQL审核上线工单的测试演示。以下过程中的演示代码可从此处https://github.com/actiontech/sqle/tree/main/example/db_plugin下载。

实操

提示:SQLE和插件为GO语言开发,如果要进行插件开发,需要对GO有一丢丢了解即可。

1. 创建插件项目

首先使用go mod初始化一个go项目,然后

mkdir sqle-pg-plugin
cd sqle-pg-plugin
touch main.go
go mod init sqle-pg-plugin # 初始化go mod 
export GOPROXY=goproxy.cn,goproxy.io,direct # 设置 GoProxy,解决SQLE库下载问题,通过IDEA开发的可以在IDEA软件上设置;
go get github.com/actiontech/sqle@v1.2204.0 # 此版本为该文章编辑时的最新版本。
2.编写最小化插件代码

在项目main.go文件内编写如下代码,即可最快的添加一个Postgres数据库审核插件,此时插件没有审核规则。

package main
 
import (
   adaptor "github.com/actiontech/sqle/sqle/pkg/driver"
)
 
func main() {
   plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{})
   plugin.Serve()
}

使用‘go build‘编译后得到二进制文件 sqle-pg-plugin,按前言中的插件的使用参考文档,我们部署到SQLE服务里。可以正常添加数据源,如下图所示:

此时正常进行SQL审核上线工单创建并上线,如下图所示:

3.给插件添加一条规则

在刚刚代码的基础上,我们在main函数内添加如下代码来新增一条规则“禁止使用 SELECT *”,完整代码如下所示。

package main
 
import (
   "context"
   "strings"
 
   "github.com/actiontech/sqle/sqle/driver"
   adaptor "github.com/actiontech/sqle/sqle/pkg/driver"
 
)
 
func main() {
   plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{})
   rule1 := &driver.Rule{
      Name:     "pg_rule_1", // 规则ID,该值会与插件类型一起作为这条规则在 SQLE 的唯一标识
      Desc:     "禁止使用 SELECT *",      // 规则描述
      Category: "DQL规范",           // 规则分类,用于分组,相同类型的规则会在 SQLE 的页面上展示在一起
      Level:    driver.RuleLevelError,    // 规则等级,表示该规则的严重程度
   }
    //
   rule1Handler := func(ctx context.Context, rule *driver.Rule, sql string) (string, error) {
      if strings.Contains(sql, "select *") {
         return rule.Desc, nil
      }
      return "", nil
   }
   plugin.AddRule(rule1, rule1Handler)
   plugin.Serve()
}

我们按之前的方式编译插件二进制文件,并部署到SQLE server内,可以看到新增了一条规则,如下图所示:

此时我们提交一个工单验证一下,可以看到触发了我们刚添加的规则

4.给插件添加一条可配置的复杂规则

基于上面的代码,我们再添加一条规则“创建的表字段过多”,具备如下特性:

  • 上面添加的规则基于字符串匹配进行的,准确性不高,无法匹配到不同的书写格式,比如大小写,换行等。因此我们在这里会基于SQL解析器开发一条规则,测试使用的解析库 https://github.com/pganalyze/pg_query_go;
  • 为了增加规则的适用性,我们准备给规则加一个动态配置给用户提供可选项。

代码如下:

package main
 
import (
   "context"
   "fmt"
   "strings"
 
   "github.com/actiontech/sqle/sqle/driver"
   adaptor "github.com/actiontech/sqle/sqle/pkg/driver"
   "github.com/actiontech/sqle/sqle/pkg/params"
   parser "github.com/pganalyze/pg_query_go/v2"
)
 
func main() {
   plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{})
 
   rule1 := &driver.Rule{
      Name:     "pg_rule_1",           // 规则ID,该值会与插件类型一起作为这条规则在 SQLE 的唯一标识
      Desc:     "避免查询所有的列",            // 规则描述
      Category: "DQL规范",               // 规则分类,用于分组,相同类型的规则会在 SQLE 的页面上展示在一起
      Level:    driver.RuleLevelError, // 规则等级,表示该规则的严重程度
   }
   rule1Handler := func(ctx context.Context, rule *driver.Rule, sql string) (string, error) {
      if strings.Contains(sql, "select *") {
         return rule.Desc, nil
      }
      return "", nil
   }
 
   // 定义第二条规则
   rule2 := &driver.Rule{
      Name:     "pg_rule_2",
      Desc:     "表字段不建议过多",
      Level:    driver.RuleLevelWarn,
      Category: "DDL规范",
      Params: []*params.Param{ // 自定义参数列表
         &params.Param{
            Key:   "max_column_count",  // 自定义参数的ID
            Value: "50",                // 自定义参数的默认值
            Desc:  "最大字段个数",            // 自定义参数在页面上的描述
            Type:  params.ParamTypeInt, // 自定义参数的值类型
         },
      },
   }
 
   // 这时处理函数的参数是 interface{} 类型,需要将其断言成 AST 语法树。
   rule2Handler := func(ctx context.Context, rule *driver.Rule, ast interface{}) (string, error) {
      node, ok := ast.(*parser.RawStmt)
      if !ok {
         return "", nil
      }
      switch stmt := node.GetStmt().GetNode().(type) {
      case *parser.Node_CreateStmt:
         columnCounter := 0
         for _, elt := range stmt.CreateStmt.TableElts {
            switch elt.GetNode().(type) {
            case *parser.Node_ColumnDef:
               columnCounter++
            }
         }
         // 读取 SQLE 传递过来的该参数配置的值
         count := rule.Params.GetParam("max_column_count").Int()
         if count > 0 && columnCounter > count {
            return fmt.Sprintf("表字段不建议超过%d个,目前有%d个", count, columnCounter), nil
         }
      }
      return "", nil
   }
 
   plugin.AddRule(rule1, rule1Handler)
   plugin.AddRuleWithSQLParser(rule2, rule2Handler)
 
   // 需要将 SQL 解析的方法注册到插件中。
   plugin.Serve(adaptor.WithSQLParser(func(sql string) (ast interface{}, err error) {
      // parser.Parse 使用 PostgreSQL 的解析器,将 sql 解析成 AST 语法树。
      result, err := parser.Parse(sql)
      if err != nil {
         return nil, fmt.Errorf("parse sql error")
      }
      if len(result.Stmts) != 1 {
         return nil, fmt.Errorf("unexpected statement count: %d", len(result.Stmts))
      }
      // 将 SQL 的语法树返回。
      return result.Stmts[0], nil
   }))
 
   plugin.Serve()
}

打开SQLE规则界面,可以看到该规则已经添加到SQLE了,如图:

我们将规则模板内该规则的值调小点然后进行测试一下

首先我们提交一条超过5个字段的建表语句,此时SQLE会触发该规则并给出预期的提示信息,如下图所示:

然后我们提交一条不超过5个字段的建表语句,此时SQLE不会触发该规则,如下图所示:

总结

通过上面的演示,大概介绍了SQLE数据库审核插件的简单开发测试过程。大家可根据类似步骤开发出一套符合自己公司需求的规则集,结合SQLE平台来满足日常使用。我们也提供了一些常见数据库的审核插件,大家也可以在此基础上进行开发,参考文档:https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/overview.html

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

相关推荐

音乐频谱灯的硬件艺术:从STM32到SK9822LED的工程美学

本文探讨了基于STM32微控制器和SK9822 LED的音乐频谱灯硬件设计与实现。通过ADC采集音频信号,利用FFT算法进行频谱分析,并驱动LED阵列呈现动态视觉效果,展现了硬件工程与艺术美学的完美融合。

Pepper的专栏 212

数据库审核工具SQLE部署及使用

点击上方蓝字关注我SQLE( https://opensource.actionsky.com/sqle/ )是由上海爱可生信息技术股份有限公司 开发并开源,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。我们可以基于此工具进行数据库SQL审核,提升SQL脚本质量。1. 部署SQLE下载地址:https://github.com/actiont...

gjc592的博客 3384

【Unity】制作简易三维场景

本文介绍如何制作一个三维场景

CiNian_的博客 5331

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

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

Python实战:用MNE-Python从脑电数据中提取P300成分(附完整代码)

本文提供了一份使用MNE-Python从脑电数据中提取P300成分的完整实战指南。通过详细的代码示例,系统讲解了从环境搭建、数据加载、预处理(滤波、分段、伪迹剔除)到P300波形提取、可视化与参数量化的全流程。重点介绍了如何利用零相位滤波和叠加平均技术,从EEG信号中精准分离出反映认知加工的P300事件相关电位,适用于脑机接口与认知神经科学研究。

weixin_29240343的博客 338

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

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

ActionTech的博客 2376

从零开始:小鼠Bulk RNA-seq全流程实战指南

本文提供了一份详尽的小鼠Bulk RNA-seq全流程实战指南,涵盖从软件环境搭建、原始数据质控与清洗、序列比对、基因定量到下游差异表达分析与功能富集。内容面向生物信息学新手,通过清晰的代码示例和步骤解析,帮助读者系统掌握Bulk RNA-seq数据分析的核心技能,并产出可靠的生物学洞见。

lake5的博客 713

SQL 审核神器 SQLE 专业版全新上线,永久免费!

全新上线 | SQLE 专业版,永久免费!

ActionTech的博客 1360

C语言版数字锁相放大器实现指南:从复数运算到嵌入式MCU移植的坑我都帮你踩了

本文详细介绍了C语言实现数字锁相放大器的关键技术,包括复数运算优化、嵌入式MCU移植的实战经验及内存管理策略。针对STM32等资源受限平台,提供了从浮点到定点数转换的优化方案,帮助工程师高效处理微弱信号提取问题。

weixin_30721077的博客 432

SAP 成本分摊逻辑与案例(含具体数据)

摘要: SAP成本分摊通过**分配(Allocation)与分摊(Assessment)**两种方式,将间接成本中心费用按预设规则(如人数、工时、比例等)结转至直接成本对象。分配保留原始成本要素(如电费、工资),适用于需明细追踪的场景;分摊则打包为次级成本要素(如管理费用),简化核算。实操案例涵盖行政费用分配(按人数)、水电车间分摊(按工时)、机修作业分摊(作业成本法)及内部订单结算,系统通过KSV1/KSU1配置循环规则,KSV5/KSU5执行结转。关键点在于选择匹配业务的分摊基础,合理配置次级成本要素,

金牌架构师 550

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

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

PawSQL的博客 1990

Python爬虫实战:使用最新技术抓取百度贴吧帖子内容

本文详细介绍了使用Python最新技术抓取百度贴吧帖子的完整流程。通过库,我们实现了高效的异步爬虫,具备JavaScript渲染、智能反爬应对、数据持久化等高级功能。这个爬虫框架具有良好的扩展性,可以根据具体需求进行功能增强。

2201_76125261的博客 777

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

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

PawSQL的博客 1606

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

老叶茶馆 750

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

开源免费!SQLE:简单易用的 SQL 质量治理平台

最近有客户对 SQL 审核平台有需求,还要求免费开源,经过在网上一顿搜罗,看到一款叫做 SQLE 的 SQL 质量管理平台,了解下来感觉非常不错,基本满足客户需求。想着大家可能也有这方面需求,就写一篇文章分享一下这款免费开源的 SQLE 平台,后面我还会持续分享 SQLE 的相关内容。本文给大家简单介绍了一下什么是 SQLE 以及如何快速体验 SQLE 的功能!SQLE是爱可生自主研发支持多元数据库的 SQL 质量管理平台。应用于开发、测试、上线发布、生产运行阶段的 SQL 质量治理。

LuciferLiu_DBA 1万+

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

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

ActionTech的博客 1066

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

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

q1472750149的博客 1436

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

作者:Jason 就职于捷信消费金融有限公司,担任 DBA 工作。先后从事过 Oracle 、Mongo 、MySQL 的 DBA ,以及大数据 ETL 的开发工作。对 NEWSQL 以及云原生分布式数据库具有浓厚的兴趣爱好。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 看到此标题,了解proxysql的朋友都不免一头雾水,自动扩展proxysql查询路由调整能力?提升innodb cluster可用性?围绕此话题,我们通过一些故障场景演示如何实.

ActionTech的博客 1099

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

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

ActionTech的博客 1235

SQL审核工具 SQLE ,绝对不容错过的活动

SQLE 征稿活动开始啦! 所有稿件,一经采用,均会为作者署名、推广、并收纳到《大智小技4》。 SQLE 是一款面向数据库使用者和管理者的 SQL 审核工具,旨在规范 SQL 审核上线流程,提高 SQL 质量。自 2021 年 10 月 24 日推出后得到数据库行业同仁及用户的广泛关注。 为进一步提升 SQLE 审核平台内容质量及深度,现对广大用户发起征稿,希望更多关注技术内容的小伙伴能够在这个平台展示自己,分享独到的技术见解和优质内容。 活动时间: 2022.03.10 - 2022.04.30 征稿要

ActionTech的博客 1481

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

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

Tony.Dong的专栏 1456

SQL审核 | SQLE 二次开发环境搭建

作者:Jason 就职于捷信消费金融有限公司,担任 DBA 工作。先后从事过 oracle 、mongo 、mysql 的 DBA ,以及大数据 ETL 的开发工作。对 NEWSQL 以及云原生分布式数据库具有浓厚的兴趣爱好。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 SQLE 是由上海爱可生信息技术股份有限公司 开发并开源,支持 SQL审核、索引优化、事前审核、事后审核、支持标准化上线流程、原生支持 MySQL 审核且数据库类型可扩展的 SQ.

ActionTech的博客 1295

SQL审核 | “云上”用户可以一键使用 SQLE 审核服务啦

阿里云用户今后不需要安装部署SQLE, 就可以免费使用审核服务了。近期,爱可生正式通过了阿里云计算巢 “云合计划”合作伙伴认证,并成功发布“云树SQL审核软件”计算巢服务,即SQLE云服务,同时使用阿里云云市场作为产品发布渠道。阿里云用户, 通过简单几步操作,即可拥有 SQLE云一体化解决方案。SQLE云服务与SQLE开源版本功能完全一致, 持续为用户提供极致的使用体验。接下来,文章将通过以下四部分内容来介绍下SQLE以及SQLE云服务的使用体验:文章主要分为以下四部分内容:一、SQLE 项目介绍二、优势对

ActionTech的博客 403
上一篇: 故障分析 | MySQL 5.7 使用临时表导致数据库 Crash
下一篇: 技术分享 | 为什么我的 MySQL 客户端字符集为 latin1
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值