Jaylon

导航

 

官方文档永远是第一参考重点 关门放官档:

https://actiontech.github.io/sqle-docs-cn/

下载连接

https://github.com/actiontech/sqle/releases

关于SQLE就不多做介绍说明了

安装 SQLE Server

RPM 的安装命令:rpm -ivh /path/to/sqle-ce-${version}.qa.el7.x86_64.rpm --prefix=/opt/sqle

本例操作如下: rpm -ivh  sqle-ce-1.2201.0.qa.el7.x86_64.rpm --prefix=/usql/local/sqle

[root@App02 download]# cd /usr/local/sqle/
[root@App02 sqle]# pwd
/usr/local/sqle
[root@App02 sqle]# ls
bin etc logs scripts sqled.pid ui

准备 SQLE 存储数据库

准备一台 MySQL5.7 作为 SQLE Server 的后端存储数据库。

执行下面命令创建 SQLE Server 需要的 schema:

CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4_unicode_ci

本例用了之前文章docker下安装的mysql8027;安装过程略,实操记录如下:

[root@App02 sqle]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd74000857a0 centos:8.4.2105 "/bin/bash" 4 weeks ago Up About an hour 0.0.0.0:8027->8027/tcp mysql8027
[root@App02 sqle]# docker inspect mysql8027 |grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "10.0.0.11",
[root@App02 sqle]# docker exec -it /mysql8027 /bin/bash
[root@mysql8027 /]# ps -ef |grep mysql
root 73 36 0 10:15 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql
mysql 1487 73 0 10:15 pts/1 00:00:11 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/error/error.err --open-files-limit=65535 --pid-file=audit.pid --socket=/usr/local/mysql/data/mysql.sock --port=8027
root 1588 1552 0 10:43 pts/2 00:00:00 grep --color=auto mysql
[root@mysql8027 /]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 8.0.27-commercial MySQL Enterprise Server - Commercial

Copyright (c) 2000, 2021, 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> CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4_unicode_ci;

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| audit_test |
| information_schema |
| mysql |
| performance_schema |
| sqle |
| sys |
| sysbench |
+--------------------+
7 rows in set (0.01 sec)

至此SQLE的准备工作已经全部完成了;接下来需要进行一些配置并启动就可以了;

配置的说明从官网摘抄搬运如下:

sqle_config(SQLE Server 的运行配置)

  • server_port: sqle 服务的 http 端口,默认10000
  • enable_https: 是否开启https,默认不开启
  • cert_file_path: https 证书路径
  • key_file_path: https 私钥路径
  • auto_migrate_table: 自动创建表结构,初始化数据
  • debug_log: 开启debug模式,打印更多日志,会打印业务SQL,开发环境可开启
  • log_path: 日志目录

db_config.mysql_cnf(SQLE Server 存储数据的数据库运行配置)

  • mysql_host: 指定数据库地址
  • mysql_port: 指定数据库端口
  • mysql_user: 指定数据库用户
  • mysql_password: 指定数据库密码
  • mysql_schema: 指定数据库 schema

找到之前安装目录下的etc 需要修改默认的配置文件模板名。

[root@App02 /]# cd /usr/local/sqle/
[root@App02 sqle]# ls
bin etc logs scripts sqled.pid ui
[root@App02 sqle]# cd etc

mv sqled.yml.template sqled.yml # 修改后确保 sqled.yml 的文件 owner 为 actiontech-universe:actiontech

[root@App02 etc]# ll
total 8
-rw-r----- 1 actiontech-universe actiontech 331 Jan 28 16:47 gh-ost.ini
-rw-r----- 1 actiontech-universe actiontech 350 Jan 28 16:52 sqled.yml

[root@App02 etc]# vim sqled.yml

 最后

systemctl start sqled

有些同学这里执行启动失败,且对应的log下也没有找到相关记录,请注意两件事,
第一它的程序要成功安装 权限正确; 第二它的库配置要能正常连接访问
保障以上基本没问题;另外新建库的时候是空库,执行启动后库里会生成一些相关的表;重启或重装时候需要注意冲突

 以下为启动失败的样例做一个简单说明:

 

由于没有产生日志  直接执行原启动命令内容

/usr/local/sqle/bin/sqled --config /usr/local/sqle/etc/sqled.yml --pidfile=/usr/local/sqle/sqled.pid

报错1

get new storage failed: dial tcp 192.168.137.128:3306: connect: connection refused

这个问题是IP和端口错误,查看mysql的实际IP和端口进行修改

报错2

 这个是同事安装的 未知操作导致库问题,删除sqle库重建新的再来一遍即可

总结下来就是要保障库访问连接ok 安装ok 肯定是没问题的了 ,有时候连库访问由于实验环境可能会稍慢,此时还没连上库就去查看状态也是失败的,启动完后略等连库成功 状态就又恢复正常了

 安装操作至此结束 接下来进行一些实际使用记录

用浏览器访问安装了sqle的机器的ip + etc/sqled.yml 里配置的server_port端口号  [之前截图我配置的是8089 但我这里用了外网ip映射端口50089,仅供参考]

 也可以切回本地ip+8089端口访问

默认账户

  • 用户名:admin
  • 密码:admin

登陆后界面

接下来官方说了自己权限与资源的设计理念

SQLE 的权限设计有两个初衷:

  • 除 admin 用户外,所有用户只能看到自己应该看到的资源
  • 除 admin 用户外,所有用户只能操作自己应该操作的资源

SQLE 中的资源包括:

  • 数据源
  • 审核工单
  • 审核计划

基于以上的描述,SQLE 实现了基于 RBAC 的权限管理系统。

SQLE RBAC

简单来说和数据库用户权限区别不大 就是用户你随便建 ,至于这个用户需要什么权限 就给它绑什么角色,不同的角色可以允许访问指定库数据源;这样 谁具备什么角色 可以操作哪些库资源 就很明了了

根据SQLE的设计 对应的我们需要添加数据源 、角色、用户;将数据源分配给角色 然后将角色分配给用户;以此来控制用户权限资源

添加数据源:

官档的顺序是要先建用户权限的;我们这里先加了数据源 此时可访问的角色、审核规则模板都是空的没有可选的,因为还没建;可能要先建角色和模板会好看一点;先建了回头根据需求再补

添加完成后查看如下;数据源名称一项不能允许中文字符 不太友好

接下来创建用户和角色 以及审核规则模板

建用户,此时无角色赋权 多建几个测试

 建角色,由于之前的数据源和用户都已经建好了 此时可以直接绑定数据源和用户了,可以多选 ;权限资源分配很灵活 不过类似名称的的打头的栏目 都不支持中文

用户和角色都可以修改 很方便

接下来就是审核规则的建立了;这里我们先建一个模板,需要注意的是,请注意这行小字:数据库会应用其所绑定的所有规则模板的规则并进行SQL审核

规则一经创建则已绑定所选的数据库启用了

 第二步可以自定义启用规则  就不截图了 提交后创建成功;如果要修改 目前发现模板名称不支持修改 只能删除重建

前期的准备工作就基本完成了 ;SQLE目前支持工单提交审核 和审核计划,

审核工单流程中,通常是审核一些 DDL,如建库(create database)、建表(create table)和改表(alter table)等语句。 审核工单管理,主要解决 SQL 上线的规范化流程化的问题,它能够帮助 DBA 自动化处理整个 SQL 上线过程中一些重复繁琐的工作。

审核工单管理也有它的局限性。

  • 第一,通常审核工单管理 中流转的是 DDL 一类的 SQL,它们的上线通常是一次性操作。DDL 上线后,通常还会有业务 SQL(通常是 DML)访问数据库。这时可能会遇到一些执行效率较低的业务 SQL 造成数据库的性能问题。这类 SQL 是审核工单管理无法覆盖到的。
  • 第二,通常在使用审核工单管理审核需要上线的 SQL 时,项目已经临近发版,功能都已经实现完毕。如果这时审核出 SQL 存在一些问题,是否修复这些问题,可能会收到很多因素的影响(如 SQL 问题的影响面大小,项目发版的紧急程度等)。虽然这类 SQL 审核工单管理可以覆盖到,但因为外部因素,会导致问题 SQL 的存在。

SQLE 使用审核计划来解决上面的两个问题。

审核计划是基于 Cron 的 SQL 自动审核系统。一个审核计划的成功运行需要两方参与,分别是 SQLE Server 和 Scanner。在 SQLE Server 中创建审核计划。Scanner 将 SQL 上传到 SQLE Server 对应的审核计划的 SQL 池,SQLE 根据配置对 SQL 池触发审核,并生成审核报告。

先来看看工单审核:

工单审核

直接输入SQL并审核

工单创建成功后提交列表查看

 点击工单进去界面 可以进行审批

上传SQL文件审核

 

 

 点击创建工单后返回列表查看并确定上线即可

审核任务

创建审核任务

注意:审核任务是对指定数据库执行的XML文件的静态SQL的一个采集上传,对XMLSQL以及SQL运行所需的库有一定的依赖性,收集到的SQL会适配当前库的审核规则来给出审核结果

记下访问凭证 后续scanner扫描指定任务的时候需要用到

Scanner

MyBatis Scanner 通过指定代码目录,扫描并解析目录中的 MyBatis XML 文件得到 SQL 语句。MyBatis Scanner 将解析出的 SQL 上传至 SQLE Server 后,触发审核并得到审核结果。如果审核结果中包含 Error 级别的错误(指触发了 Error 级别的审核规则),则将退出码(Exit Code)置为非 0

常见的使用场景是将 MyBatis Scanner CI/CD 集成。通过持续的审核代码仓库中的 SQL 以及变更,可以提早发现问题。

Scanner 打包在 SQLE RPM 中。在部署完 SQLE Server后(部署方式见安装部署, Scanner 的二进制放在 ${SQLE的工作目录}/bin 目录下

Scanner 相关参数

host:SQLE Server 所在的主机 IP 地址(默认是当前主机)

port:SQLE Server 提供 HTTP 服务的端口(默认是 10000)

name:审核计划名(表示 Scanner 将 SQL 上传至哪个审核计划的 SQL 池

token:审核计划上传凭证(具体值可到审核计划列表页中访问凭证列中获取)

[root@sqle-server bin]# ./scannerd --help

SQLE Scanner

Usage:

  SQLE [command]

Available Commands:

  help        Help about any command

  mybatis     Parse MyBatis XML file

  slowquery   Parse slow query

Flags:

  -h, --help           help for SQLE

  -H, --host string    sqle host (default "127.0.0.1")

  -N, --name string    audit plan name

  -P, --port string    sqle port (default "10000")

  -A, --token string   sqle token

Use "SQLE [command] --help" for more information about a command.

可以看到Scanner其中一个企业版功能slowquery是可以进行慢sql分析的

Scanner mybatis 

[root@App02 world-db]# /usr/local/sqle/bin/scannerd mybatis --help

Parse MyBatis XML file

Usage:

   SQLE mybatis [flags]

Flags:

   -D, --dir string   xml directory

   -h, --help         help for mybatis

Global Flags:

   -H, --host string    sqle host (default "127.0.0.1")

   -N, --name string    audit plan name

   -P, --port string    sqle port (default "10000")

   -A, --token string   sqle token

Scanner mybatis 可以解析MyBatis XML文件

用法如下:

根据指定库对应的xml文件目录进行扫描 收集SQL语句上传给SQLE服务器并根据库对应的审核规则进行审核并给出审核结果;目前经测试如果xml内含SQL在其绑定的库内执行异常 则会影响本次扫描任务结果异常

/usr/local/sqle/bin/scannerd mybatis -H="117.158.4.243" -P="50089" \

-N=Mybatis \

-D=/home/Jaylon/download/mysql_sample_data/world-db/ \

-A="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJNeWJhdGlzIiwiZXhwIjoxNjc1OTI0MT M1LCJuYW1lIjoiYWRtaW4ifQ.l3M9AUgZCzn366StO3csdIXaJUtxuh9MleuoXz4zwNc"

扫描日志记录在sqle目录下的logs/api.log

 

 审核并查看结果

点开右侧的记录查看结果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




 

posted on 2022-02-10 16:48  Jaylon  阅读(977)  评论(0)    收藏  举报