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

news2024/9/20 14:26:19

基本概念

数据库审计(简称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.coloradmin.cn/o/1245669.html

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

相关文章

python树的双亲存储结构

这种存储结构是一种顺序存储结构,采用元素形如“[结点值,双亲结点索引]”的列表表示。通常每个结点有唯一的索引(或者伪地址),根结点的索引为0,它没有双亲结点,其双亲结点的索引为-1。例如,所示的树对应的双…

项目中常用的 19 条 SQL 优化宝典

一、EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引…

Cobalt Strike之反向上线操作

前言 ​ Cobalt Strike 使用 GUI 框架 SWING(一种java GUI的库)开发,攻击者可通过CS木马在 beacon 元数据中注入恶意 HTML 标签,使得Cobalt Strike对其进行解析并且加载恶意代码(类似XSS攻击),…

【Proteus仿真】【51单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能: 系统运行后&#xf…

【LeetCode刷题笔记】DFSBFS(三)

图的基础知识 邻接矩阵是一个二维表,其中横纵坐标交叉的格子值为 1 的表示这两个顶点是连通的,否则是不连通的。

BUUCTF [ACTF新生赛2020]outguess 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 下载附件,得到一堆文件。 解题思路: 1、根据题目和flag.txt文件提示,猜测为outguess隐写。 outguess下载安装 kail 终端命…

竞赛YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快,YOLOv6还没用熟YOLOv7就来了,如果有同学的毕设项目想用上最新的技术,不妨看看学长的这篇文章,学长带大家简单的…

IP 代理的基础知识有哪些?

本文将介绍流冠IP代理的基础知识,帮助您了解IP代理的概念、类型、作用、设置方法和注意事项。 一、IP代理的概念 IP代理是一种网络代理服务,它通过代理服务器帮助用户访问互联网,并将用户的请求转发到目标网站,同时将目标网站的响…

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师,大家都知道技术面试是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1、看你项目都用到了…

TCP/IP协议:最流行的电子邮件协议SMTP(简单邮件传输协议)详解

SMTP 是一种电子邮件协议,用于通过互联网从一个电子邮件帐户向另一个电子邮件帐户发送电子邮件。它是TCP/IP协议应用层的一部分。作为一种电子邮件协议,它建立了不同电子邮件客户端和帐户之间轻松信息交换的规则。这样,简单邮件传输协议就可以…

【SpringBoot系列】SpringBoot日志配置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【JavaScript】3.1 项目实践:制作一个简单的网页应用

文章目录 项目需求HTML结构JavaScript逻辑添加待办事项标记待办事项删除待办事项保存待办事项 总结 在此章节中,我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用,用户可以添加新的待办事项,标记已完成的事项…

【C++学习手札】模拟实现list

​ 🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:リナリア—まるりとりゅうが 0:36━━━━━━️💟──────── 3:51 🔄 ◀️ ⏸ ▶️…

深入理解计算机系统(原书第三版)PDF 高清中文版

深入理解计算机系统 PDF 深入理解计算机系统 pdf, 这本书的全名是:Computer Systems:A Programmer’s Perspective(所以它又被称为 CSAPP),个人习惯把它翻译为程序员所需了解的计算机系统知识,尽…

基于GPRS的汽车碰撞自动报警系统(论文+源码)

1. 系统设计 本次基于GPRS的汽车碰撞自动报警系统的设计中,其主要的目标功能如下:1、实时检测当前的GPS精度和纬度坐标;2.当发生碰撞后系统自动将当前的信息通过GPRS数据发送到远端数据进行报警;3、系统在碰撞后一方面进行本地报警…

运放如何进行全波整流

对于一个双极性的交流信号,如果想要把负半轴的信号镜像到正半轴,我们可以接一个整流桥,这种叫做全波整流。 如果双极性的交流信号经过一个二极管,则交流信号的负半轴不能通过二极管,输出只有正半轴的信号,这…

【UE5】五大基类及其使用

UObject UObject表示对象,准确来说,虚幻引擎中的对象基础类为UObject UObject提供了以下功能: 垃圾收集(Garbage collection)引用自动更新(Reference updating)反射(Reflection&am…

【面试送分题!“商品分类浏览”如何测试?】

电商项目无论是工作中,还是面试中,都是一个高频出现的词。 面试官非常热衷提问关于电商项目的问题。例如商品分类怎么测试?购物车怎么测试?订单怎么测试?优惠券怎么测试?支付怎么测试?等等。 …

多功能回馈式交流电子负载的应用

多功能回馈式交流电子负载是用于模拟和测试电源、电池等电子设备的负载工具。它具有多种应用,可以用于测试和评估各种类型的电源,包括直流电源和交流电源。它可以模拟各种负载条件,如恒定电流、恒定电压和恒定功率,以验证电源的性…

ubuntu22.04 git 安装

安装git:默认情况下,Git 在 ubuntu 22.04 基础存储库中可用。 现在运行以下命令在您的 Ubuntu 系统上安装最新版本的 Git: 查看当前版本号 git --version