当前位置: 首页 > news >正文

Yearning-MYSQL 审计平台部署

目录

一. 环境准备

二. 部署安装

三. 基础使用

1.用户管理

2. 创建SQL审计流程

3. 自定义审核规则

4. 导入数据源 

5. 创建权限组

6. 登录用户申请工单

1. 创建一个DDL工单提交

2. SQL审核执行

3.  SQL执行

4. 数据验证 


Yearning 是一个开源的 MySQL SQL 审计平台,专为数据库管理员和开发者设计,提供了包括查询审计、SQL 审核、SQL 回滚和自定义工作流在内的多种功能。它基于 Vue.js 构建前端,支持 SQL 语法高亮、自动补全和智能提示,以及可视化展示。Yearning 通过内置的审核规范帮助用户规范 SQL 变动,提高 SQL 使用的规范化和标准化,同时支持二次开发以适应特定的审核策略。

Yearning 的安装相对简单,只依赖 MySQL 数据库来存储工单数据,支持容器化部署,并提供了 Dockerfile 以方便快速部署。它目前主要支持 MySQL 数据库,并且兼容 99% 的 MySQL 标准 SQL 语法,但已知不支持某些复杂查询语句、CREATE TABLE LIKE 语句、视图语句和外键相关语句。

Yearning 的核心功能包括:

  • SQL 查询和审核
  • 历史审核记录查看
  • SQL 语句自动检测与执行
  • 支持消息推送,如钉钉机器人和邮件
  • 用户权限及管理,包括角色划分和细粒度权限控制
  • 审核规则配置,内置了多种常见场景的 SQL 审核规则
  • AutoTask 自动执行任务功能

一. 环境准备

本文使用虚拟机配置:

主机名IP系统软件版本配置信息
localhost192.168.226.29Rocky_linux_Mini9.4

Yearning v3.1.6.3

2核4G

官方网站:Yearning/README.zh-CN.md at next · cookieY/Yearning · GitHub 

下载地址:Tags · cookieY/Yearning · GitHub 

为避免一些未知原因,暂不使用最新版本的3.1.8,使用往期版本 v3.1.6.3

 

二. 部署安装

上传压缩包,这里我上传好了

[root@localhost ~]# ll
total 20944
-rw-r--r--  1 root root 21439981 Aug  1 11:07 Yearning-v3.1.6.3-linux-amd64.zip
-rw-------. 1 root root      815 Jun  6 14:00 anaconda-ks.cfg

解压 

[root@localhost ~]# yum install -y unzip
[root@localhost ~]# unzip Yearning-v3.1.6.3-linux-amd64.zip[root@localhost ~]# ll
total 20944
drwxr-xr-x  3 root root       85 Sep  8  2023 Yearning
-rw-r--r--  1 root root 21439981 Aug  1 11:07 Yearning-v3.1.6.3-linux-amd64.zip
-rw-------. 1 root root      815 Jun  6 14:00 anaconda-ks.cfg
[root@localhost Yearning]# ll
total 25364
-rwxr-xr-x 1 root root 19413896 Sep  8  2023 Yearning
-rw-r--r-- 1 root root      775 Aug 10  2023 conf.toml
drwxr-xr-x 2 root root       67 Aug 19  2022 docker
-rwxr-xr-x 1 root root  6553600 Aug 23  2022 migrate

拉取mysql8.0镜像,当然也可以使用宿主机的安装mysql,这里我是用docker的mysql学习用。

[root@localhost ~]# docker pull mysql:8.0

 创建数据库容器

在mysql8.0中默认字符集是 utf8mb4,默认排序规则(collation)是 utf8mb4_0900_ai_ci

[root@localhost ~]# docker run --name mysql8-Yearning \-e MYSQL_ROOT_PASSWORD=1234 \-e MYSQL_DATABASE=Yearning \-d mysql:8.0

查看容器IP

[root@localhost ~]# docker inspect mysql8-Yearning

修改配置Host和Password,根据需要修改

[root@localhost ~]# cd Yearning
[root@localhost Yearning]# vim conf.toml
[Mysql]
Db = "Yearning"
Host = "172.17.0.2"
Port = "3306"
Password = "1234"
User = "root"

 

安装初始化

[root@localhost Yearning]# ./Yearning install#下面提示就输入yes是否已将数据库字符集设置为UTF8/UTF8MB4? [yes|no]: yes

运行

[root@localhost Yearning]# ./Yearning run
#直接使用 ./Yearning run 可以前台运行并动态看到日志输出终端显示
#如果不想看,放到后台运行可以使用 nohup ./Yearning run & 命令并在敲一次回车即可。

 

访问IP+端口,例如这里我访问:http://192.168.226.29:8000/

 默认用户名:admin 默认密码:Yearning_admin 

三. 基础使用

1.用户管理

2. 创建SQL审计流程

3. 自定义审核规则

这些规则更严格定义SQL提交到审核的流程,这里测试我就不加规则约束了。

4. 导入数据源 

新增一个mysql8.0容器测试

[root@localhost ~]# docker run -itd \-e MYSQL_ROOT_PASSWORD=1234 \-e MYSQL_DATABASE=lzztty \--name dazzling_fermi \mysql:8.0

查询到其IP

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                 NAMES
a1c31a8f884a   mysql:8.0   "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes   3306/tcp, 33060/tcp   dazzling_fermi
be951f65edc5   mysql:8.0   "docker-entrypoint.s…"   2 hours ago     Up 2 hours     3306/tcp, 33060/tcp   mysql8-Yearning[root@localhost ~]# docker inspect dazzling_fermi

5. 创建权限组

给这个数据源里,定义一些权限组。

  

将左边的勾选点击 > 符号即可,点击确定即会保存,这里我是将DDL,DML和查询权限都给了

然后给用户指定对应的权限组赋予权限组里的权限

6. 登录用户申请工单

1. 创建一个DDL工单提交

 

CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,name VARCHAR(255) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,UNIQUE INDEX unique_name (name)
);

2. SQL审核执行

登陆审核的用户,看我的规则,审核人是张三用户,执行人是李四和王五用户

3.  SQL执行

看执行定义的SQL审计流程,李四和王五用户才是执行人

切换李四用户测试

 

4. 数据验证 

登陆这个操作的数据库容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                 NAMES
f3a49aaed7d1   mysql:8.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   3306/tcp, 33060/tcp   dazzling_fermi
be951f65edc5   mysql:8.0   "docker-entrypoint.s…"   4 hours ago         Up 4 hours         3306/tcp, 33060/tcp   mysql8-Yearning
[root@localhost ~]# docker exec -it dazzling_fermi /bin/bash
bash-5.1# mysql -uroot -p1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 63
Server version: 8.0.39 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lzztty             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)mysql> use lzztty;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+------------------+
| Tables_in_lzztty |
+------------------+
| test_table       |
+------------------+
1 row in set (0.00 sec)mysql>

可以看到数据执行成功了,使用ctrl + p + q快捷键可以在不退出容器的情况下从容器的交互式模式(attached mode)中分离出来,返回到宿主机的命令行界面。

以上是DDL工单测试,DML和查询测试这里不在赘述,详情见下图:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 导入数据到hive的几种方式
  • @RequestBody与@RequestParam
  • RabbitMQ 入门篇
  • 【数学建模】——【A题 信用风险识别问题】全面解析
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • 【文件fd】深入理解重定向和缓冲区
  • python-局部求和(赛氪OJ)
  • 2024年有什么赚钱的副业推荐半年还清贷款,成功变现12.3w的全套玩法都放这里了!!!
  • linux用户组练习
  • FastAPI之Depends
  • Scrapy 爬取旅游景点相关数据(五)
  • 【LLM】-14-搭建问答系统
  • 天气曲线echarts
  • PHP常用函数
  • Opencv学习-LUT函数
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • github指令
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty源码解析1-Buffer
  • node 版本过低
  • nodejs:开发并发布一个nodejs包
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Web设计流程优化:网页效果图设计新思路
  • Xmanager 远程桌面 CentOS 7
  • 闭包--闭包作用之保存(一)
  • 从0到1:PostCSS 插件开发最佳实践
  • 翻译:Hystrix - How To Use
  • 手写一个CommonJS打包工具(一)
  • 我的zsh配置, 2019最新方案
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 回归生活:清理微信公众号
  • #70结构体案例1(导师,学生,成绩)
  • #define,static,const,三种常量的区别
  • #QT(TCP网络编程-服务端)
  • (1)(1.9) MSP (version 4.2)
  • (1)SpringCloud 整合Python
  • (7)STL算法之交换赋值
  • (k8s中)docker netty OOM问题记录
  • (分布式缓存)Redis持久化
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十八)三元表达式和列表解析
  • (图)IntelliTrace Tools 跟踪云端程序
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理出现中文乱码的情况
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Micro Framework 4.2 beta 源码探析
  • .net mvc部分视图
  • .NET Remoting学习笔记(三)信道
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET+WPF 桌面快速启动工具 GeekDesk