51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

sql审核平台Archery的安装和使用

# sql审核平台Archery的安装和使用 {#sql审核平台archery的安装和使用}

本文介绍sql审核平台Archery的安装和使用。支持对不规范的sql给出改进措施,在线查询数据库数据、sql审核、回滚、用户的权限管理等操作。使用Archery平台可以使得我们所有的数据库操作都有记录,并且可以很方便地sql审核和回滚。Archery除了支持mysql,也支持其他类型的数据库。

官方教程:https://archerydms.com/
github:https://github.com/hhyo/Archery

假定mysql和redis已经安装完成。

因为系统中之前已经有运行redis和mysql服务,所以不想通过docker-compose.yml再创建额外的mysql和redis服务,所以需要对相关配置文件做一些调整,详见后续的配置说明。

# 下载程序 {#下载程序}

  • 解压程序压缩包

    可前往[官方网站](https://github.com/hhyo/archery/releases/)下载最新的安装包。

tar -zxvf ./Archery-1.8.1.tar.gz -C ~/workspace/project/wangshibiao/docker-compose-file/

  • 进入程序的docker启动根目录 cd ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose

    wangshibiao@bogon  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ±  ls -l total 8 drwxr-xr-x 6 wangshibiao staff 192 3 27 2021 archery -rw-r--r-- 1 wangshibiao staff 1446 3 27 2021 docker-compose.yml drwxr-xr-x 4 wangshibiao staff 128 3 27 2021 inception drwxr-xr-x 3 wangshibiao staff 96 3 27 2021 mysql wangshibiao@bogon  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ± 

# 修改archery服务的配置文件 {#修改archery服务的配置文件}

配置文件路径:vi ./archery/settings.py

# 修改mysql配置 {#修改mysql配置}

修改mysql的用户名、密码、host、port、数据库名。

# 该项目本身的mysql数据库地址
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'archery',
        'USER': 'root',
        'PASSWORD': 'buzhidao',
        'HOST': '10.31.0.100',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4'
        },
        'TEST': {
            'NAME': 'test_archery',
            'CHARSET': 'utf8mb4',
        },
    }
}

# 修改redis配置 {#修改redis配置}

# 缓存配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://10.31.0.100:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": ""
        }
    },
    "dingding": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://10.31.0.100:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": ""
        }
    }
}

# 修改goinception配置 {#修改goinception配置}

vi ./inception/config.toml

backup_host = "10.31.0.100"
backup_port = 3306
backup_user = "root"
backup_password = "buzhidao"

goInception是一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能。
若想进一步了解goInception,请前往goInception的官网 (opens new window)

# 修改inception配置 {#修改inception配置}

vi ./inception/inc.cnf

inception_remote_system_password=buzhidao
inception_remote_system_user=root
inception_remote_backup_port=3306
inception_remote_backup_host=10.31.0.100

TODO: 应该没必要做该项配置,后续验证。因为系统默认启用了goinception,那么就不会使用inception配置。

# 修改docker-compose.yml配置 {#修改docker-compose-yml配置}

  • 删除docker-compose.yml中的mysql和redis容器配置
  • 修改archery的mysql和redis连接配置
    entrypoint: "dockerize -wait tcp://mysql:3306 -wait tcp://redis:6379 -timeout 60s /opt/archery/src/docker/startup.sh"中的mysql和redis连接由主机名改为具体IP

示例配置如下:

 wangshibiao@bogon  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ±  cat ./docker-compose.yml
version: '3'

services:
  inception:
    image: hhyo/inception
    container_name: inception
    restart: always
    expose:
      - "6669"
    volumes:
      - "./inception/inc.cnf:/etc/inc.cnf"

  goinception:
    image: hanchuanchuan/goinception
    container_name: goinception
    restart: always
    expose:
      - "4000"
    volumes:
      - "./inception/config.toml:/etc/config.toml"

  archery:
    image: hhyo/archery:1.8.1
    container_name: archery
    restart: always
    ports:
      - "9123:9123"
    volumes:
      - "./archery/settings.py:/opt/archery/archery/settings.py"
      - "./archery/soar.yaml:/etc/soar.yaml"
      - "./archery/docs.md:/opt/archery/docs/docs.md"
      - "./archery/downlo-compoads:/opt/archery/downloads"
      - "./archery/sql/migrations:/opt/archery/sql/migrations"
      - "./archery/logs:/opt/archery/logs"
    entrypoint: "dockerize -wait tcp://10.31.0.100:3306 -wait tcp://10.31.0.100:6379 -timeout 60s /opt/archery/src/docker/startup.sh"
    environment:
      NGINX_PORT: 9123
 wangshibiao@bogon  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ± 

# 创建数据库 {#创建数据库}

在mysql中创建数据库archery。

create database archery default CHARSET utf8mb4 collate utf8mb4_unicode_ci;

# 初始化数据并启动服务 {#初始化数据并启动服务}

如下内容摘自[官方文档](https://archerydms.com/installation/docker/#_2)。

进入docker-compose目录,按顺序执行如下命令

# 启动
docker-compose -f docker-compose.yml up -d

# 表结构初始化
docker exec -ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql  
python3 manage.py migrate 

# 数据初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql

# 创建管理用户
python3 manage.py createsuperuser

# 重启
docker-compose restart

# 日志查看和问题排查
docker logs archery -f --tail=50

在步骤创建管理用户中会提示用户创建管理员的账号、密码和邮箱。

完整的操作过程如下:

 wangshibiao@bogon  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ±  docker-compose -f docker-compose.yml up -d
Creating network "docker-compose_default" with the default driver
Creating inception   ... done
Creating goinception ... done
Creating archery     ... done
 wangshibiao@localhost  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ±  docker exec -ti archery /bin/bash
[root@fe5538c67efd archery]# cd /opt/archery
[root@fe5538c67efd archery]# source /opt/venv4archery/bin/activate
(venv4archery) [root@fe5538c67efd archery]# python3 manage.py makemigrations sql
No changes detected in app 'sql'
(venv4archery) [root@fe5538c67efd archery]# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, django_q, sessions, sql
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sql.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying django_q.0001_initial... OK
  Applying django_q.0002_auto_20150630_1624... OK
  Applying django_q.0003_auto_20150708_1326... OK
  Applying django_q.0004_auto_20150710_1043... OK
  Applying django_q.0005_auto_20150718_1506... OK
  Applying django_q.0006_auto_20150805_1817... OK
  Applying django_q.0007_ormq... OK
  Applying django_q.0008_auto_20160224_1026... OK
  Applying django_q.0009_auto_20171009_0915... OK
  Applying django_q.0010_auto_20200610_0856... OK
  Applying django_q.0011_auto_20200628_1055... OK
  Applying django_q.0012_auto_20200702_1608... OK
  Applying django_q.0013_task_attempt_count... OK
  Applying sessions.0001_initial... OK
(venv4archery) [root@fe5538c67efd archery]# python3 manage.py dbshell<sql/fixtures/auth_group.sql
Warning: Using a password on the command line interface can be insecure.
(venv4archery) [root@fe5538c67efd archery]# python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql
Warning: Using a password on the command line interface can be insecure.
(venv4archery) [root@fe5538c67efd archery]# python3 manage.py createsuperuser
用户名: archery
电子邮件地址: 645102170@qq.com
Password:
Password (again):
密码跟 用户名 太相似了。
密码长度太短。密码必须包含至少 9 个字符。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
(venv4archery) [root@fe5538c67efd archery]# exit
exit
 wangshibiao@localhost  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ±  docker-compose restart
Restarting archery     ... done
Restarting goinception ... done
Restarting inception   ... done
 wangshibiao@localhost  ~/workspace/project/wangshibiao/docker-compose-file/Archery-1.8.1/src/docker-compose   master ± 

# 访问 {#访问}

浏览器请求http://127.0.0.1:9123/。
账号和密码即为上一步骤中由您自定义的账号和密码。

# 使用 {#使用}

# 1. 创建用户 {#_1-创建用户}

给用户关联权限组: 系统默认提供了5个权限组。当然也可以根据需要灵活自定义。

# 2. 创建实例 {#_2-创建实例}

若mysql运行在本地,那么指定的实例连接时,建议使用具体的IP不要使用127.0.0.1,否则点击实例操作列中的"测试"按钮可能会提示连接失败。

关联实例标签:通过支持上线、支持查询的标签来控制实例是否在SQL上线/查询中显示,要使用上线和查询的实例需要关联标签。

# 3. 创建资源组 {#_3-创建资源组}

关联用户和实例。

用户必须关联资源组才能访问资源组内的实例资源

# 4. sql上线 {#_4-sql上线}

要开启该功能,必须要配置下"系统配置项",包括goInception配置工单审核流配置

  • goInception配置
    按页面导航"系统管理 -> 配置项管理 -> 系统设置 -> goInception配置",进入到配置页面。
    因为archery服务可以直接通过服务名goinception来访问goInception服务,所以配置如下:

    GO_INCEPTION_HOST: goinception GO_INCEPTION_PORT: 4000 BACKUP_HOST: 10.31.0.100 BACKUP_PORT: 3306 BACKUP_USER: root BACKUP_PASSWORD: buzhidao

  • 回滚

    若不配置该项信息,那么查询回滚语句会失败。

备份库的信息(BACKUP_HOST、BACKUP_PORT、BACKUP_USER、BACKUP_PASSWORD)仅用于平台获取回滚语句,需要和审核工具自身的配置保持一致,此处配置变更不会修改审核工具自身的配置。
该项配置要和配置文件./inception/config.toml中的配置保持一致,前文中已经提到如何配置。
TODO: 后续尝试配置为额外的一个专门用户备份的数据库,和主数据库分开。也需要事先创建一个数据库archery。

  • 工单审核流配置
    如不做该项配置,那么提交sql审核时会提示完成工单审核配置。
赞(1)
未经允许不得转载:工具盒子 » sql审核平台Archery的安装和使用