详解开源数据库审计平台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.rhkb.cn/news/203862.html

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

相关文章

Unity EventSystem的一些理解和使用

Unity的EventSystem是用于处理用户输入和交互的系统。它是Unity UI系统的核心组件之一,可以用于捕捉和分发各种事件,例如点击、拖拽、按键、射线等。 常用的属性和方法有以下这些: 属性: current: 获取当前的EventSystem实例。…

Oracle-客户端连接报错ORA-12545问题

问题背景: 用户在客户端服务器通过sqlplus通过scan ip登陆访问数据库时,偶尔会出现连接报错ORA-12545: Connect failed because target host or object does not exist的情况。 问题分析: 首先,登陆到连接有问题的客户端数据库上,…

1. git入门操作

1. git入门操作 1、基本名词解释 图片 名词含义index索引区,暂存区master分支名,每个仓库都有个master,它作为主分支。branch其他分支,我们可以把master分支上的代码拷贝一份,重新命名为其他分支名work space就是我…

Rust语言入门教程(七) - 所有权系统

所有权系统是Rust敢于声称自己为一门内存安全语言的底气来源,也是让Rust成为一门与众不同的语言的所在之处。也正是因为这个特别的所有权系统,才使得编译器能够提前暴露代码中的错误,并给出我们必要且精准的错误提示。 所有权系统的三个规则…

C语言——从终端(键盘)将 5 个整数输入到数组 a 中,然后将 a 逆序复制到数组 b 中,并输出 b 中 各元素的值。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int a[5];int b[5];printf("输入5个整数&#xff1a;\n");for(i0;i<5;i){scanf("%d",&a[i]);}printf("数组b的元素值为&#xff1a;\n");for(i4;i>0;i--…

qt5.15.2及6.0以上版本安装

文章目录 下载在线安装器安装打开软件 下载在线安装器 因为从qt5.15开始不支持离线下载安装了&#xff0c;只能通过在线安装的方式进行安装。 下载在线安装下载器&#xff1a; 这个在线安装下载器网上也都是可以找到。 这里是其放到网盘上的下载地址&#xff1a; 链接&#x…

leetcode LCR24反转单链表

反转单链表 题目描述 题目分析 先来说迭代的思想&#xff1a; 上面next cur->next应该放在cur->next pre前面执行&#xff0c;这里笔误 再来说递归的思想&#xff1a; 题目代码 这个代码里面我加了我自己写的测试数据&#xff0c;自己可以去找对应的部分&#xff0c…

java springboot在测试类中构建虚拟MVC环境并发送请求

好 上文java springboot在测试类中启动一个web环境我们在测试类中搭了一个web环境 那么 下面就要想办法弄一个接口的测试 这边 我们还是要在controller包下去创建一个 controller类 写一个访问接口 这里 我创建一个 TestWeb.java 这里 我们编写代码如下 package com.example.…

【数据结构复习之路】树和二叉树(严蔚敏版)万字详解主打基础

专栏&#xff1a;数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】&#xff0c;我们接着复习 树和二叉树&#xff0c;这篇文章我写的非常详细且通俗易懂&#xff0c;看完保证会带给你不一样的收获。如果对你有帮助&#xff0c;看在我这么辛苦整理…

CCFCSP试题编号:202206-2试题名称:寻宝!大冒险!

一、题目 二、分析 因为藏宝图左下角位置一定是一棵树&#xff0c;所以只要把所有绿化图中每一棵树&#xff0c;与之相匹配&#xff0c;然后判断&#xff0c;是否整个藏宝图都是绿化图的一部分&#xff0c;如果是那就计数count1。所以来看&#xff0c;结果count最大也就是n(绿…

1、Docker概述与安装

相关资源网站&#xff1a; ● docker官网&#xff1a;http://www.docker.com ● Docker Hub仓库官网: https://hub.docker.com/ 注意&#xff0c;如果只是想看Docker的安装&#xff0c;可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤&#xff0c;一步步带你安…

Mysql 8.0主从复制模式安装(兼容Mysql 5.7)

Mysql V8.0.35安装 官网地址&#xff1a;MySQL :: Download MySQL Community Server 下载【Mysql 8.0.35】压缩包 解压压缩包&#xff0c;仅保留6个安装文件即可 mysql-community-client-8.0.31-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm my…

摄影网站的技术 SEO:提示和最佳实践

摄影就是要给人留下良好的第一印象。如果你想在竞争中领先&#xff0c;摄影师的SEO是您可以采用的最佳营销方法之一。 我们都曾有过这样的经历&#xff1a;你建立了一个漂亮的作品集网站来吸引更多的业务。网站上线并在社交媒体上推广后&#xff0c;您就可以坐等了。网站访问量…

002、ArkTS

之——开发语言 目录 之——开发语言 杂谈 正文 1.TypeScript基础 1.1 基础类型 1.2 条件语句 1.3 函数 1.4 类 1.5 模块 1.6 迭代器 2.ArkTS 2.1 JAVA SCRIPT 2.2 TS 2.3 ArkTS ​编辑 3.示例 3.1 概述性示例 3.2 自定义组件 3.3 渲染控制语法 3.4 状态管…

linux升级gcc版本详细教程

0.前言 一般linux操作系统默认的gcc版本都比较低&#xff0c;例如centos7系统默认的gcc版本为4.8.5。gcc是从4.7版本开始支持C11的&#xff0c;4.8版本对C11新特性的编译支持还不够完善&#xff0c;因此如果需要更好的体验C11以及以上版本的新特性&#xff0c;需要升级gcc到一个…

P8A002-CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例

【预备知识】 可用性&#xff08;Availability&#xff09; 数据可用性是一种以使用者为中心的设计概念&#xff0c;易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例&#xff0c;希望让使用者在浏览的过程中不会产生压力或感到挫折&#…

F5社区学习心得分享:如何克服云迁移挑战?

伴随数字时代的快速发展&#xff0c;很多企业都会借助云迁移&#xff0c;踏上转型之旅。尽管云迁移被认为是一种能够节约成本&#xff0c;且不会影响正常运营的现代化改造举措&#xff0c;然而我们并不能低估它的复杂性。正如有研究表明&#xff0c;约有41%的企业并没有通过云迁…

JSP EL表达式之 empty

好 本文我们还是继续说EL表达式 我们来讲一个非空判断的好手 empty 我们直接编写代码如下 <% page contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %> <%request.setCharacterEncoding("UTF-8");%> <!DOCTYPE html&…

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

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

补充:如何提高selenium的运行速度?

已经通读该专栏文章的同学,或许对UI自动化测试有了一定的掌握,细心的同学肯定会发现一个问题,当用例量达到一定程度时,对于整体用例的执行速度肯定不会很满意。除了应用多线程运行用例的方式加快速度,有没有其他的方法呢? 今天告诉大家,方法是有的!也是本人新学的。即…