【MySQL数据库】详解数据库审核工具SQLE的部署及接口调用

发布于:2024-05-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

SQLE部署及使用

1. 部署SQLE

SQLE相信大家都不陌生吧,它是一款开源,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL审核工具。我们可以基于此工具进行数据库SQL审核,提升SQL脚本质量,大大提高我们的开发效率。

其主要功能和优势包括:

  • 平台管理:支持用户和角色管理、配置上线数据库、基于角色的资源隔离、配置审核规则模板,以及对不同的数据库应用不同的规则模板。
  • SQL审核:支持工单审批流程、工单隔离、邮件推送审批事件、SQL上线、生成回滚语句、审核MyBatis
  • XML文件,以及审核建议按SQL归类去重展示等功能。此外,SQLE还支持审核报告下载,并提供静态审核(即脱离上线数据库审核)和定时审核功能。
  • SQL审核计划:支持通过标准接口收集来自业务的SQL统计信息,提供MyBatis文件扫描上传程序(scanner),可集成CI/CD。

SQLE3.0在SQL审核方面具有高效性和准确性的双重优势。它能够自动化地对SQL语句进行审核,从而减少了人工审核的工作量和错误率。此外,SQLE 3.0还具备强大的规则引擎,可以通过预设规则对SQL语句进行灵活的审核和检测,从而保证了SQL语句的规范性和安全性。

与其他数据库审核工具相比,SQLE具有其独特的优势。例如,本地数据库平台虽然简单,但分析范围有限,且需要人为管理。而DAM数据库活动监控平台和SIEM、日志管理工具虽然功能更多,但可能会消耗本地数据库性能。SQLE则通过提供全面的审核功能和高效的审核效率,为用户提供了更好的选择。

下载地址:https://github.com/actiontech/sqle/releases

安装

mkdir  /opt/sqle

创建SQLE元数据存储库(mysql中): create database sqle

修改配置:修改配置文件名,并按需修改端口、元数据数据库信息

启动sqle: systemctl start sqled

2. SQLE使用

功能列表如下:

在这里插入图片描述

已有的审核规则 如下,大家可以部署后自行查看 在这里插入图片描述

在这里插入图片描述

配置数据源:需配置具体实例、用户信息、审核规则模板、开启审核等

在这里插入图片描述

在这里插入图片描述

创建审核任务:

在这里插入图片描述

点击下方审核

在这里插入图片描述

审核结果如下

在这里插入图片描述

3. 调用审核接口

审核接口:http://ip:port/v1/tasks/audits

先获取token

在这里插入图片描述

使用postman调用接口进行审核:需输入token 、instance_name、instance_schema 、sql

输入token:

在这里插入图片描述

提交待审核SQL

在这里插入图片描述

查看审核结果

http://ip:10000/v1/tasks/audits/9/sqls?page_index=1&page_size=10&no_duplicate=false

在这里插入图片描述

注:数据库SQL脚本的审核是相当重要的一项工作,建议使用SQL审核工具进行审核,提升SQL质量。下一篇将通过代码来调用对应的接口并获得审核结果。

SQLE接口调用

1、创建自定义审核接口

因直接调用SQLE的审核接口,会出现token过期,且审核及结果查询接口是分开的,因此,出于以上2个原因的考虑,重新编写一个接口用于调用SQLE的审核接口并返回审核结果。参考代码如下:

# coding=utf-8
import requests
from flask import request
import json
from flask import Flask
app = Flask(__name__)
@app.route('/audit_task', methods=['post','get'])

def  audit_task():
    get_data = request.args.to_dict()
    v_instance = get_data.get('instance')
    v_schema = get_data.get('schema')
    v_sql = get_data.get('sql')


    v_token = get_token()
    v_headers = {'Authorization': f"{v_token}"}
    #print(v_headers)
    url = 'http://127.0.0.1:10000/v1/tasks/audits'
    v_data_a  = {'instance_name':v_instance,'instance_schema':v_schema,'sql':v_sql}
    #print(v_data_a)
    res = requests.post(url, data=v_data_a, headers=v_headers)
    v_taskid=res.json()['data']['task_id']
    url2='http://127.0.0.1:10000/v1/tasks/audits/'+str(v_taskid)+'{/sqls?page_index=1&page_size=10&no_duplicate=false'
    # print(url2)
    res2 = requests.get(url2,  headers=v_headers)
    audit_result = res2.json()['data'][0]['audit_result']
    if not(audit_result):
        audit_result=f'审核通过'
    return audit_result

def  get_token():
    url = 'http://127.0.0.1:10000/v1/login'
    data = {"username": "admin", "password": "xxxx"}
    # res = requests.post(url, json=data)
    h = {
        'Content-Type': 'application/json; charset=UTF-8'
    }
    res = requests.post(url, data=json.dumps(data), headers=h)
    t = json.loads(res.text)
    #print(type(json.loads(res.text)))
    token = t['data']['token']
    #print(t['data']['token'])
    return token


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000, debug=True)

注:使用时,需提前在SQLE中配置好实例信息。

2. 调用测试

运行以上接口,并使用postman调用进行测试

输入参数名特地调整了一下,以便于区别,测试情况如下

在这里插入图片描述

调用结果如下:

[error]除了自增列及大字段列之外,每个列都必须添加默认值
[error]表必须有主键
[error]新建表必须加入if not exists create,保证重复执行不报错

与上文结果一致,且 无需调用2次接口。


好书推荐

在这里插入图片描述

《MySQL数据库管理与应用》

MySQL作为一款开源的关系型数据库管理系统,有着强大的功能和广泛的应用领域,对促进信息化建设、推动数字经济发展起着重要的作用。本书全面介绍了MySQL数据库的技术原理、应用场景和开发实践,帮助读者掌握MySQL数据库的基本概念和高级特性,提升数据库设计与开发的能力。全书共11章,从数据库基础知识讲起,包括数据库概述、关系型数据库设计原则、SQL语言基础等内容,逐步深入介绍MySQL数据库的高级特性和应用技巧,如查询优化、事务管理、索引优化,延伸学习在数字经济发展情境下,数据库的发展趋势和应用等内容。此外,本书最后一章还通过两个综合应用项目将理论知识与实际应用结合在一起。

购书链接:点此进入

本书旨在通过清晰的逻辑结构、简洁易懂的语言和实际案例来帮助读者快速掌握MySQL数据库技术,并在实际工作中灵活运用,与时俱进地应对信息化发展的新要求,为企业和社会创造更大的价值,推动中国软件技术和数据库领域的创新和发展。无论你是数据库初学者、软件开发人员、数据库管理员还是数据分析师,只要你对MySQL数据库感兴趣或需要在工作中应用MySQL数据库,本书都为你提供了宝贵的知识和指导。它既可以作为学习教材,也可以作为参考书。


在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到