1. 主要功能

1. SQL 查询
    查询工单
    导出
    自动补全,智能提示
    查询语句审计
    查询结果脱敏
    
2. SQL 审核
    流程化工单
    SQL语句语法检测
    根据规则检测SQL语句合规性
    自动生成DDL/DML回滚语句
    历史审核记录
3. 推送
    E-mail 工单推送
    钉钉 webhook 机器人工单推送
4. 用户权限及管理
    角色划分
    基于用户的细粒度权限
    注册
5. 其他
    todoList
    LDAP 登录
    动态审核规则配置
    自定义审核层级
6. AutoTask 自动执行

2. 安装

2.1 注意事项

# 仅依赖 Mysql 数据库。

# mysql 版本必须为5.7及以上版本(8.0及以上请将sql_mode 设置为空)并已事先自行安装完毕且创建 Yearning 库,字符集应为 UTF8mb4 (仅 Yearning 所需 mysql 版本)

2.2 yearning 下载

# Yearning-go 提供二进制下载包
# 下载地址: https://github.com/cookieY/Yearning/releases

# 请选择最新版本 在 Assets 中选择 Yearning-x.x.x.linux-amd64.zip 包进行下载
# 如需进行代码修改或自己编译请移步至二次开发页面

2.3 yearning 目录结构

2.4 填写配置文件

cat conf.toml
[Mysql]
Db = "Yearning"
Host = "127.0.0.1"
Port = "3306"
Password = "xxxx"
User = "root"

[General]   #数据库加解密key,只可更改一次。
SecretKey = "dbcjqheupqjsuwsm"

关于 SecretKey
SecretKey 是 token/数据库密码加密/解密的 salt。
建议所有用户在初次安装 Yearning 之前将 SecretKey 更改(不更改将存在安全风险)
格式: 大小写字母均可, 长度必须为 16 位 如长度不是16位将会导致无法新建数据源
特别注意: 此 key 仅可在初次安装时更改!之后不可再次更改!如再次更改会导致之前已存放的数据源密码无法解密,最终导致无法获取相关数据源信息

# 使用帮助:
./Yearning --help

2.5 初始化及安装

./Yearning install

# 如要再次安装,请先把 yearning 库下所有表删除,否则重复执行无效

2.6 启动服务

# 默认启动
./Yearning run

# 参数启动
./Yearning run --push "172.27.80.35" -port "8000"

打开浏览器 http://127.0.0.1:8000
默认账号/密码:admin/Yearning_admin

2.7 服务更新

./Yearning migrate

# Yearning采用自动表结构同步 无需手动更新表结构。只需停止原服务并替换安装包后重新启动即可
# 在一些特殊的升级情况中(破坏性变更)需要手动进行数据同步操作.如在版本更新公告中并无提示破坏性升级则无视以下命令!

2.8 容器化

docker run -d -it -p8000:8000 -e MYSQL_USER=root -e MYSQL_ADDR=10.0.0.3:3306 -e MYSQL_PASSWORD=123123 -e MYSQL_DB=Yearning test/yearning

# Yearning安装包内已含有Dockerfile文件,可直接进行build打包成镜像
# Yearning 从v2.0.4版本开始支持环境变量传参
# 容器启动时可通过环境变量的方式传入数据库地址。

3. K8s安装

https://next.yearning.io/guide/cloud.html

3.1 Secret

apiVersion: v1
kind: Secret
metadata:
  name: db-conf
  namespace: yearning
type: Opaque  # 使用的是generic类型
data:   # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
  addr: MTkyLjE2OC4xMjkuMzM6NjAwMgd==
  user: eWVhcm5pbmc==
  pass: WWVhcm5pbmdAdGVzdDIwMjQh=
  data: eWVhcm5pbmca=    
  sk: WWVhcm5pbmdAdDI0MDMxOA==

# 测试环境
data:   # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
  addr: 192.168.64.xx:6002
  user: yearning
  pass: Yearning@test2024!
  data: yearning    
  sk: Yearning@t240318    # 必须是16位

3.2 Service

apiVersion: v1
kind: Service
metadata:
  labels:
    app: yearning
  name: yearning
  namespace: yearning
spec:
  ports:
    - port: 80  # svc内部端口,通过clusterIP访问
      protocol: TCP
      targetPort: 8000  # 镜像内服务的端口
      nodePort: 31073
  selector: # 标签选择器,与deployment中的标签保持一致
    app: yearning
  type: NodePort  # Service类型

3.3 Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: yearning
  namespace: yearning
spec:
  rules:
    - host: yearning.io
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: yearning
                port:
                  number: 80

3.4 Deployment

apiVersion: apps/v1 # API版泵
kind: Deployment  # 资源类型
metadata: # 元数据
  labels: # 标签
    app: yearning
  name: yearning  # deployment的名字
  namespace: yearning  # 所属命名空间
spec: 
  replicas: 1 # 副本数
  selector: # 选择器,选择针对谁做
    matchLabels:
      app: yearning
  template: # 镜像的模板
    metadata: # 元数据
      labels: # 标签
        app: yearning
    spec:
      nodeSelector:
          yearning: yearning
      tolerations:
      - key: "efkmonitoring"
        operator: "Equal"
        value: "efkmonitoring"
        effect: "NoSchedule"  
      containers: # 容器信息
        - image: yeelabs/yearning  # 容器镜像
          name: yearning # 容器的名字
          imagePullPolicy: IfNotPresent # 镜像的下载策略
          env:  # 容器中的变量
            - name: MYSQL_ADDR
              valueFrom:
                secretKeyRef: # 存储的变量信息
                  name: db-conf
                  key: addr
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: user
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: pass
            - name: MYSQL_DB
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: data
            - name: SECRET_KEY
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: sk
          ports:    # 定义容器中的端口信息
            - containerPort: 8000
              name: web
              protocol: TCP
          readinessProbe:   # 就绪检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 25
            periodSeconds: 2
          livenessProbe:    # 存活检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 2
          resources:    # 资源限制
            requests:
              cpu: 200m
              memory: 1Gi
            limits:
              cpu: 250m
              memory: 2Gi

3.5 账号密码

# 默认账号:admin,默认密码:Yearning_admin

# 登录不了
1. 删除所有表
2. 进入窗口执行./Yearning install    #YES

4. 使用

4.1 添加用户

# 添加用户
jwgod1/Yearning_jwgod1
jwgod2/Yearning_jwgod2

4.2 添加环境

管理-->设置-->进阶设置-->自定义环境

4.3 审核流程

# Yearning着重于SQL语句审核及审批流程的实现。在一般场景中我们希望于实现以下的审批流程:
开发人员 -> DBA审核并执行

# 当业务不断扩大部门层级增多后我们希望拥有多层级的审批流程:
开发人员 -> 开发主管审批 -> 项目负责人审批-> DBA审核并执行 (多层级)

# 对于以上的需求及场景均可通过Yearning自定义流程功能实现

管理->流程 页面,点击新建流程按钮

image-20240320153400979

4.4 添加数据源

环境 db类型 名称 地址 端口 用户名 密码 流程 负责人 读写类型
test mysql8 xx系统测试环境 192.168.64.xx 3306 root xxxx@test2023! jwgod 读写

4.5 添加权限组

# 权限组内权限共分为DDL权限(表结构修改),DML权限(表数据变更),Query权限(查询)共三大类
DDL  -- 表结构修改
DML  -- 表数据变更
DQL  -- 查询

image-20240320153309976

5 工单

5.1 查询工单

# 点击工单申请页面,选择Query类进行查询
1. 如未开启查询审核功能将直接进入查询界面
2. 如开启查询审核功能将进入申请界面,提交后按流程,审核人员审核后提交人员在直接查询

5.2 DML/DDL工单

1. 点击工单申请页面,根据实际提单需求选择DML/DDL中的某一类进行工单提交
2. 点击对应数据源卡片进入工单提交页面