目录
一. 环境准备
二. 部署安装
三. 基础使用
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 | 系统 | 软件版本 | 配置信息 |
localhost | 192.168.226.29 | Rocky_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和查询测试这里不在赘述,详情见下图: