详解开源数据库审计平台Yearning

基本概念

数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。它通过对用户访问数据库行为的记录、分析和汇报,用来帮助用户事后生成合规报告、事故追根溯源,同时加强内外部数据库网络行为记录,提高数据资产安全。

数据库审计是数据库安全技术之一,数据库安全技术主要包括:

  • 数据库漏扫

  • 数据库加密

  • 数据库防火墙

  • 数据脱敏

  • 数据库安全审计系统

概括起来主要表现在以下三个层面:

  1. **管理风险:**主要表现为人员的职责、流程有待完善,内部员工的日常操作有待规范,第三方维护人员的操作监控失效等等,离职员工的后门,致使安全事件发生时,无法追溯并定位真实的操作者。SQL审核是保证数据库DDL 和 DML 安全使用、SQL变更可追溯、降低线上数据事故概率的重要手段。

  2. **技术风险:**Oracle, SQL Server是一个庞大而复杂的系统,安全漏洞如溢出, 注入层出不穷,每一次的CPU(Critical Patch Update)都疲于奔命, 而企业和政府处于稳定性考虑,往往对补丁的跟进非常延后,更何况通过应用层的注入攻击使得数据库处于一个无辜受害的状态。

  3. **审计层面:**现有的依赖于数据库日志文件的审计方法,存在诸多的弊端,比如:数据库审计功能的开启会影响数据库本身的性能、数据库日志文件本身存在被篡改的风险,难于体现审计信息的有效性和公正性。此外,对于审计数据的挖掘和迅速定位也是任何审计系统必须面对和解决的一个核心问题之一。

行业产品现状

  1. 企业产品

就国内而言,做数据库审计产品的公司越来越多,比如:安华金和、天融信、安恒、绿盟、Themis宜信公司等等。

  1. 云平台数据库审计

阿里云、AWS等都有自己的数据库审计平台。

  1. 开源类

本文即将介绍的Yearning。

开源数据库审计平台Yearning

简介

Yearning是一个轻量级的Web端的MySQL SQL语句审核平台,提供查询审计,SQL审核,SQL回滚,自定义工作流等多种功能。Yearning的前端是基于Vue.js构建的,它还提供SQL语法高亮、自动补全和智能提示、可视化等。

Yearning自身包含了一套通常适用的审核规范,基本上能满足日常需要,同时规范了日常开发需求所涉及到的SQL变动,在Yearning平台的辅助下,日常的SQL变动也更加贴近SQL使用的规范化、标准化的要求,同时100%基于GO语言研发的Yearning也可以通过自定义二次开发(遵循AGPL协议)增加一些符合自己审核策略。

Yearning的安装十分简单,它只依赖一个mysql数据库用于存储工单的数据。官方提供了安装手册用于在linux上安装Yearning。除此之外,Yearning还支持容器化部署,安装包内置了Dockerfile,方便快捷。同时Yearning还支持二次开发,二次开发的同学可以自己构建发布。

主要功能Feature

  • SQL查询

  • 查询工单

  • 导出

  • 自动补全,智能提示

  • 查询语句审计

  • SQL审核

  • 流程化工单

  • SQL语句检测与执行

  • SQL回滚

  • 历史审核记录

  • 推送

  • E-mail工单推送

  • 钉钉webhook机器人工单推送

  • 用户权限及管理

  • 角色划分

  • 基于用户的细粒度权限

  • 注册

  • 其他

  • todoList

  • LDAP登录

  • 动态审核规则配置

  • AutoTask自动执行

兼容性与依赖

  1. Yearning 不依赖于任何第三方SQL审核工具作为审核引擎,内部已自己实现审核/回滚相关逻辑。
  • 仅依赖Mysql数据库。mysql版本必须5.7及以上版本

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

  • Yearning 的前端管理界面基于1080p分辨率开发仅支持1080p及以上显示器访问

  1. Yearning目前只支持MySQL。

  2. Yearning SQL审核平台目前兼容99%的Mysql 标准SQL语法。已知不支持的语句类型有:

  • 复杂的查询语句(多表,多函数,非必现。并不是所有复杂语句不支持)

  • create table like 语句

  • 视图语句

  • 外键相关语句

部分功能展示

1. 登陆界面

2. 用户模块

2.1 Dashboard

dashboard主要展示Yearning各项数据包括用户数/数据源数/工单数/查询数以及其他图表。个人信息栏内用户可以修改密码/邮箱/真实姓名,同时可以查看该用户权限以及申请权限

2.2 我的工单

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

2.3 提交****工单(DDL&DML审核)

提交DDL/DML相关SQL语句的执行审核,需要指定SQL语句内容(DDL或DML语句)、SQL执行的数据库,执行时间/频率、工单审核人等信息。此处的SQL编辑器支持语法高亮、自动补全等。等审核人审核通过后,该DDL/DML语句才可按配置定时执行。

2.4 查询数据库

当用户需要查询/导出数据时,需要提交查询审核申请单,填写好查询说明、查询条件预估所需的查询时间等信息,待审核人审核通过后,用户方可进入查询页面进行查询。

在查询页面期间,用户所提交的查询语句均会进行审计记录,且仅支持查询语句,不可使用非查询语句。

3. 审核模块

3.1 工单审核

管理员审核用户提交的工单(DDL/DML语句执行申请),管理员可以通过或者驳回用户的工单请求,如果审核通过,由执行人(Yearning中的角色种类之一)来点击执行按钮。

3.2 查询审核

管理员审核用户查询请求。

3.3 权限审核

管理员用户的权限审核

4. 管理模块

4.1 用户管理

创建/修改/删除用户。创建用户时需要指定用户角色(操作人/执行人/管理员等)以及部门等其他信息。

4.2 数据库管理

添加/修改/删除数据源。可以通过数据库地址(本地或公网访问地址)、端口号以及数据库的账号密码来关联不同的数据库,包括:本地的MySQL数据库;部署在公网服务器的MySQL数据库;阿里云、AWS等云平台的MySQL数据库等,都可以添加到Yearning的数据源之中。

关联之后,可以使用Yearning来对他们进行统一的管理。

4.3 权限管理

创建/修改权限组。Yearning中通过权限组的方式来进行权限控制,将不同的用户加入到不同的权限组之中,来赋予不同用户不同的权限。具体参见本文后续的Yearning中的权限设计章节

5. 通知模块

Yearning还支持进行消息推送。在设置中配置消息推送渠道,支持钉钉机器人/邮件;还支持OpenLDAP平台。

6. 内置SQL审核规则

Yearning内置了多种常见场景的SQL审核规则,管理员开启对应的规则后,用户提交的工单(SQL语句)会先经过内置审核规则的过滤,内置规则判定通过后,才会到达人工审核的流程。以此方式可以大大减少人工审核的工作量。

除了使用Yearning提供的内置审核规则之外,100%基于GO语言研发的Yearning也可以通过自定义二次开发(遵循AGPL协议)增加一些符合自己审核策略。

下表展示了Yearning中原生支持的内置的审核规则

规则类型

规则描述

规则类型

规则描述

DDL

强制表必须拥有表注释

DML

Insert最大插入行数上限

DDL

强制表字段必须拥有列注释

DML

允许update/insert 语句使用limit关键字

DDL

强制非timestamp类型字段必须为NOT NULL

DML

不允许隐式转换

DDL

强制非text,blob,json,timestamp类型字段必须拥有默认值

DML

检查Insert语句中插入的字段名是否存在

DDL

强制float/double类型变更为decimal类型

DML

强制DML语句必须拥有where条件

DDL

强制自增列初始值为1

DML

禁止DML语句使用Order by子句

DDL

强制主键名称为ID

DML

禁止DML语句使用Select子句

DDL

强制主键为自增列

DML

DML最大影响行数

DDL

强制主键必须使用无符号标志unsigned

Pt-osc

开启Pt-poc

DDL

开启索引名称规范(索引名必须以idx_为开头

Pt-osc

pt-osc可执行文件路径,精确到文件本身。 如: /usr/bin/pt-online-schema-change

DDL

开启mysql关键词检查

Pt-osc

当表体积大于该值且开启pt-osc时,该表DDL语句将使用pt-osc进行变更 单位:M

DDL

允许跨库表迁移

Pt-osc

--chunk-time 当需要复制的块大于设置的chunk_size时则不复制

DDL

允许删除表

Pt-osc

--no-drop-new-table 如果复制原始表失败,则删除新表

DDL

允许删除库

Pt-osc

--no-drop-old-table 重命名后删除原始表。在原表被成功重命名以让新表取而代之之后,如果没有错误,pt-osc将在默认情况下删除原表。如果有任何错误,pt-osc将保留原始表

DDL

允许主键类型为非int/bigint

Pt-osc

--no-check-replication-filters 如果在任何服务器上设置了replication filter 则中止。pt-osc将查找replication filter的服务器选项,如binlog_ignore_db和replicate_do_db。如果它找到任何这样的filter,它将终止并产生一个错误。

DDL

允许索引名为空

Pt-osc

--no-check-alter 解析指定的——alter并尝试警告可能的意外行为。

DDL

允许单个工单提交多条DDL语句

Pt-osc

--no-check-unique-key-change 不检查唯一索引

DDL

允许字段进行类型转换(不同字段之间的转换或长度从长变短。如:int -> bigint,int(50) -> int(20))

Pt-osc

--print 打印OSC执行的SQL语句。

DDL

允许使用after/first

Pt-osc

--alter-foreign-keys-method 当pt-osc重命名原始表以让新表取而代之时,外键“跟随”已重命名的表,并且必须更改外键以引用新表。

DDL

允许创建视图

Pt-osc

--set-vars lock_wait_timeout= 锁定等待时间 单位:秒

DDL

允许创建分区表

Pt-osc

--chunk-time 动态调整块的⼤⼩避免每个数据副本花费很长时间执行。

DDL

允许添加bit,enum,set类型字段

Pt-osc

--sleep

DDL

create/alter 表或字段时允许的Collate范围。多个请使用逗号进行分割

Pt-osc

--max-lag 复制最大延迟时间.单位:秒

DDL

create/alter 表或字段时允许的Charset范围。多个请使用逗号进行分割

Pt-osc

--check-interval 检查间隔时间。

DDL

建表必须拥有的字段,多个字段请用逗号分隔

Pt-osc

--max-load Threads_connected: 最大线程连接数

DDL

单个索引指定字段上限

Pt-osc

--max-load Threads_running: 最大线程运行数

DDL

单个表最多允许几个索引

Pt-osc

--critical-load Threads_connected 关键线程连接数

DDL

DDL最大影响行数

Pt-osc

--critical-load Threads_running: 关键线程运行数

DDL

char字段最大长度

Pt-osc

--recursion-method 发现副本的首选递归方法。

DDL

表名最大长度限制

7. AutoTask自动执行任务

用户可通过该功能设置自动执行任务,在任务配置中设置任务SQL语句的类型(Insert/Update/Delete)、任务的目标数据库、表格以及最大影响行数等条件。当提交的DML语句符合配置的任务条件时,将会自动执行,无需审核人审核。该功能仅限DML语句使用,需要慎重使用!

Yearning中的权限设计

1. 理念

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

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

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

2. 权限种类

在Yearning中权限共分为2大类

  1. 角色权限

  2. 细粒度权限

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

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

3. 如何分配权限

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

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

总结

Yearning是一款比较流行且成熟的开源MySQL SQL审计平台,它的定位是面向中小型企业/组织/个人的轻量级平台。它可以帮助开发者快速的完成SQL语句的语法的审核、检测、执行和回滚等操作。

Yearning自身包含了一套通常适用的审核规范,基本上能满足日常需要,同时规范了日常开发需求所涉及到的SQL变动,在Yearning平台的辅助下,日常的SQL变动也更加贴近SQL使用的规范化、标准化的要求,同时100%基于GO语言研发的Yearning也可以通过自定义二次开发(遵循AGPL协议)增加一些符合自己审核策略,但是它的审核引擎Juno不是开源的。同时基于Vue.js开发的前端平台,提供了SQL语法高亮、自动补全和智能提示、可视化等用户体验较好的交互形式,也为它增色不少。

审核规则这一块的逻辑全部都是在JS中传递和处理的,使得它在面对大规模数据场景时,性能会遇到瓶颈。除此之外,只支持MySQL的限制,也让人觉得多少有点美中不足。

参考链接

https://github.com/cookieY/Yearning

https://guide.yearning.io/

转至:https://developer.aliyun.com/article/790865

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人智能货柜:提升购物体验

无人智能货柜:提升购物体验 随着移动支付的普及,人们日常生活中的主要场景已经渗透了这一支付方式。同时,无人智能货柜作为购物的重要渠道,正在崭露头角。通过人工智能、图像识别和物联网技术的应用,无人智能货柜将使购…

什么是复费率电表?

随着科技的不断进步和人们对能源管理的日益重视,复费率电表逐渐成为我国电力系统中不可或缺的一员。复费率电表是一种能够实现电能计量、峰谷电价划分以及负荷控制等多功能的智能电表,它采用先进的通信技术和计算机算法,对用户的用电行为进行…

软件系统测试有哪些测试流程?系统测试报告编写注意事项

在软件开发的过程中,系统测试是至关重要的一环,它的目的是验证和评估软件产品是否符合预期的质量标准,以确保系统的稳定性、可靠性和安全性。 一、软件系统测试的测试流程 1、需求分析与测试计划制定:根据需求分析确定测试目标、…

软件开发及交付的项目管理角色

在软件开发及交付过程中,通常会涉及不同的角色和职责,包括业务角色、技术角色和管理角色。这些角色在项目管理中发挥着不同的作用,以确保项目的成功和交付高质量的产品。 业务角色:包括产品经理、业务分析师和业务运营人员等职位…

张弛声音变现课,青春剧配音实用攻略

在为青春剧添声时,配音艺术家须要捕获并传达剧中年轻角色的活泼精神、成长道路上的激情,以及他们在面对友情、爱情和理想时的情绪起伏。青春剧特别关注年轻人的成长故事,着重描绘他们在成长中的经历和变化。下面是一些为青春剧配音的建议&…

TP5制作图片压缩包

目标:将多张图片制成在一个压缩包内,供调取使用 public function test() {//引入压缩包类$zip new \ZipArchive();//新定义一个zip包$zipname ROOT_PATH./public/zip/.date("YmdHis").rand(111,999)..zip;if ($zip->open($zipname, \ZipArchive::CREATE) true…

2023年跨界融合创新应用合作发展大会-核心PPT资料下载

一、峰会简介 本次大会主题为“创新地理信息价值 服务数字中国建设”。1天主论坛和6场专题论坛的报告,围绕主题深入探讨地理信息产业与相关重要应用领域的跨界融合和深化合作。 本届大会将搭建地理信息产业与旅游、林业、环保、气象、住建、水利、农业农村、电力等…

竞赛选题 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题

文章目录 1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器学习的垃圾邮件分类 该项目…

3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)

文章目录 WebSocket 的由来WebSocket 是什么WebSocket 优缺点优点缺点 WebSocket 适用场景主流浏览器对 WebSocket 的兼容性WebSocket 通信过程以及原理建立连接具体过程示例Sec-WebSocket-KeySec-WebSocket-Extensions 数据通信数据帧帧头(Frame Header&#xff09…

组合数学学习

指数生成函数可以与排列结合在一起,而幂级数和 组合结合在一起 如果要进行计算的值不是一个具体的值,那么就要考虑生成函数

Windows如何使用key登录Linux服务器

场景:因为需要回收root管理员权限,禁止root用户远程登录,办公环境只允许普通用户远程登录,且不允许使用密码登录。 一、生成与配置ssh-key 1.使用root管理员权限登录到目标系统。 2.创建一个新的普通用户,和设置密码用…

用uniapp在微信小程序实现画板(电子签名)功能

目录 一、效果展示 二、插件推荐与引入 三、代码具体应用 四、h5端将base64转换为url 一、效果展示 二、插件推荐与引入 手写板、签字板&#xff1b;<zwp-draw-pad /> - DCloud 插件市场 这个在微信小程序引入时内容简单&#xff0c;且涉及的方法很多&#xff0c;…

【C/C++】排序算法代码实现

这里&#xff0c;汇总了常见的排序算法具体代码实现。使用C语言编写。 排序算法实现 插入排序冒泡排序选择排序快速排序希尔排序归并排序 插入排序 #include <stdio.h> #include <stdlib.h>void InsertSort(int arr[],int n){int i,j,temp;for(i 1;i < n;i){ …

Python 异常的传递性

实例 这里就简单用2个function来演示一下异常的传递性 func1 这里num 1/0明显是一个ZeroDivisionError错误&#xff0c;作为演示 def func1():print("fun1 开始执行")num 1 / 0print("func1 结束执行") func2 def func2():print("func2 开始执…

tomcat国密ssl测试

文章目录 程序包准备部署配置访问测试 程序包准备 下载 tomcat8.5 https://www.gmssl.cn/gmssl/index.jsp 下载 tomcat 国密组件及证书 本次测试所有的程序文件均已打包&#xff0c;可以直接 点击下载 部署配置 自行完成 完成centos 的jdk配置。 部署tomcat,将 gmssl4t.jar…

数字孪生农村供水工程平台:为乡村振兴注入新活力

随着科技的不断进步&#xff0c;数字孪生技术逐渐成为各行业创新发展的重要驱动力。在水利领域&#xff0c;数字孪生农村供水平台以其独特的优势&#xff0c;为农村供水系统带来了革命性的变革。本文将为您详细介绍数字孪生农村供水平台的核心特点及优势&#xff0c;带您领略智…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景选择

文章目录 1、ReLU 函数&#xff08;隐藏层中是一个常用的默认选择&#xff09;1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数&#xff08;多分类任务最后一层都会使用&#xff09;5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

mongo DB -- aggregate分组查询后字段展示

一、分组查询 在mongoDB中可以使用aggregate中的$group操作对集合中的文档进行分组,但是查询后的数据不显示其他字段,只显示分组字段 aggregate进行分组示例 db.collection.aggregate([{$group: {_id: "$field"}},]) 查询后显示 展开只显示两个字段 二、显示所有字段…

APM工具skywalking部署

一 整体架构 整个架构&#xff0c;分成上、下、左、右四部分&#xff1a; 上部分 Agent &#xff1a;负责从应用中&#xff0c;收集链路信息&#xff0c;发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是&…

SQL基础理论篇(九):存储过程

文章目录 简介存储过程的形式定义一个存储过程使用delimiter定义语句结束符存储过程中的三种参数类型流控制语句 存储过程的优缺点参考文献 简介 存储过程Stored Procedure&#xff0c;SQL中的另一个重要应用。 前面说的视图&#xff0c;只能勉强跟编程中的函数相似&#xff…