游乐游手机版
首页/业界动态/文章详情

Archery SQL审核平台部署使用与二次改造指南

时间:2026-08-14 18:25
PART 01 概述 在数据库运维领域,SQL审核与查询的流程化、自动化一直是提升DBA与开发协作效率的关键。Archery,作为一款开源的SQL审核查询平台,正是为此而生。它致力于将SQL审核从人工、零散的操作,转变为标准化、可追溯的线上流程。接下来,我们将从部署到使用,再到两个常见的定制化改造

PART 01. 概述

在数据库运维领域,SQL审核与查询的流程化、自动化一直是提升DBA与开发协作效率的关键。Archery,作为一款开源的SQL审核查询平台,正是为此而生。它致力于将SQL审核从人工、零散的操作,转变为标准化、可追溯的线上流程。接下来,我们将从部署到使用,再到两个常见的定制化改造,为你完整梳理基于Docker Compose的Archery实践路径。

PART 02. Docker Compose 部署

前提条件

部署前,请确保服务器已安装Docker和Docker Compose,并建议预留4GB以上的内存资源,以保证服务稳定运行。

快速部署步骤

首先,拉取项目代码:

git clone https://github.com/hhyo/Archery.git
cd Archery

接着,需要根据你的实际环境,编辑src/docker-compose/docker-compose.yml文件。核心是调整MySQL和Redis的连接信息:你可以选择连接已有的数据库服务,或者让Compose文件一并启动这些依赖。

配置完成后,启动所有服务:

docker compose up -d

服务启动后,为了后续定制化改造方便,建议将容器内的配置目录导出并挂载为数据卷:

docker cp archery:/opt/archery/common ./
docker cp archery:/opt/archery/sql/templates ./sql/
# 编辑docker-compose.yml,在archery服务下添加卷挂载
volumes:
      - "./archery/common:/opt/archery/common"

添加挂载后,重启服务使配置生效:

docker compose down
docker compose 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

最后,创建一个管理员账户,并通过浏览器访问https://服务器IP:9123即可登录平台。

python3 manage.py createsuperuser

PART 03. 相关配置

系统配置

登录后,进入“系统管理” > “配置项管理” > “系统设置”,这里集中了平台的核心配置,包括数据库备份、邮件服务器、消息通知等。

1. goInception 配置(用于对修改的数据进行备份,已集成在docker-compose.yaml中)

这里主要配置goInception服务的连接信息以及用于备份的MySQL实例信息。配置项包括GO_INCEPTION_HOST/PORT,以及BACKUP_HOST/PORT/USER/PASSWORD。

goInception配置界面截图

2. SQL优化

Archery集成了SQLAdvisor和SOAR两款SQL优化工具。你只需要在配置中指定它们的路径和测试连接信息即可启用。Docker镜像已内置相关组件。

  • SQLADVISOR_PATH: /opt/archery/src/plugins/sqladvisor
  • SOAR_PATH: /opt/archery/src/plugins/soar
  • SOAR_TEST_DSN: root:密码@服务器IP:3306/archery

SQL优化工具配置截图

3. 工单通知

为了确保工单状态能及时通知到相关人员,需要配置平台基础URL和通知权限组。

  • ARCHERY_BASE_URL: https://archery.internal.cn(请替换为你的实际域名)
  • DDL_NOTIFY_AUTH_GROUP: DBA(指定接收DDL工单通知的权限组)

工单通知配置截图

4. 其他配置

这部分包含一些增强功能和平台自定义设置。

  • MY2SQL: 用于高性能解析MySQL binlog的工具,路径已预设。
  • DEFAULT_AUTH_GROUP/RESOURCE_GROUP: 设置新用户的默认权限组和资源组。
  • CUSTOM_TITLE_SUFFIX: 自定义平台浏览器标签页显示的标题后缀。

其他系统配置截图

工单审核流程配置

流程化管理是Archery的核心。在“系统管理” > “配置项管理” > “工单审核流配置”中,可以为不同的资源组(需先创建)配置查询、SQL上线、数据归档等工单的审批流程。支持设置多级审批,下图展示了为“DBA”组配置流程的示例。

工单审核流程配置界面截图

PART 04. 使用流程

1. 创建资源组,比如prod

创建资源组界面截图

2. 修改Default组权限

为新创建的“Default”权限组添加必要的菜单权限(如数据字典、SQL查询)和操作权限(如提交查询、提交上线工单)。

修改权限组界面截图

3. 添加数据库实例

将需要管理的数据库实例添加到Archery中。填写连接信息,选择所属资源组(如prod),并建议取消勾选“验证服务端SSL证书”以避免连接问题。

添加数据库实例界面截图

4. 创建用户

创建平台用户,为其分配“Default”权限组和“prod”资源组。

创建用户界面截图

5. 用户登录后进行在线查询

在线查询界面截图

6. 缺少权限则提交申请

如果用户对某个实例没有查询权限,可以在线提交权限申请工单,走预先配置好的审批流程。

提交权限申请界面截图

PART 05. 定制化改造

调整查询权限的授权时间选项

Archery默认的查询权限授权时间选项中,“长期”对应一年,这在某些内部安全要求较高的场景下可能显得过长。一个常见的需求是将其调整为更短的时间,例如三个月。

改造目标:将前端展示的“长期(一年)”选项调整为“三个月”,并将实际有效期设置为90天。

改造步骤:

a. 修改前端HTML模板
找到文件 ./archery/sql/templates/queryapplylist.html,定位到授权时间下拉框部分,将“一年”的选项文本改为“三月”。

b. 修改对应的JavaScript逻辑
在同一文件中,找到处理提交的applyvalidate()函数,修改其中对year值的计算逻辑,将实际授权天数从365天改为90天。

if (applyvalidate()) {
    //时间格式化
    var date = new Date();
    if (valid_date === 'day') {
        valid_date = addDate(date, 1);
    } else if (valid_date === 'week') {
        valid_date = addDate(date, 7);
    } else if (valid_date === 'month') {
        valid_date = addDate(date, 30);
    } else if (valid_date === 'year') {
        valid_date = addDate(date, 90); // 将365改为90
    } else {
        valid_date = addDate(date, 1);
    }
    ...

修改完成后,重启Archery的Web服务(例如执行docker compose restart archery)以使改动生效。

使邮件通知支持 TLS 加密

当使用Outlook、Gmail等要求TLS加密的邮件服务器时,需要改造Archery的邮件发送逻辑以支持STARTTLS命令。

改造目标:使Archery能够通过TLS加密连接(如587端口)发送邮件。

改造步骤:

a. 修改 MsgSender 类
编辑文件./archery/common/utils/sendmsg.py,在__init__方法中增加MAIL_TLS配置项,并在send_email方法中增加启动TLS的逻辑。

class MsgSender(object):
    def __init__(self, **kwargs):
        if kwargs:
            ...
            self.MAIL_TLS = kwargs.get("tls", True)  # 新增:默认开启 TLS
        else:
            sys_config = SysConfig()
            # email信息
            ...
            self.MAIL_TLS = sys_config.get("mail_tls", True)  # 新增:从配置读取
        # 端口逻辑调整
        if self.MAIL_REVIEW_SMTP_PORT:
            self.MAIL_REVIEW_SMTP_PORT = int(self.MAIL_REVIEW_SMTP_PORT)
        elif self.MAIL_SSL:
            self.MAIL_REVIEW_SMTP_PORT = 465
        elif self.MAIL_TLS:
            self.MAIL_REVIEW_SMTP_PORT = 587  # TLS 默认端口
        else:
            self.MAIL_REVIEW_SMTP_PORT = 25

    def send_email(self, subject, body, to, **kwargs):
        ...
        if self.MAIL_SSL:
            server = smtplib.SMTP_SSL(self.MAIL_REVIEW_SMTP_SERVER, self.MAIL_REVIEW_SMTP_PORT, timeout=3)
        else:
            server = smtplib.SMTP(self.MAIL_REVIEW_SMTP_SERVER, self.MAIL_REVIEW_SMTP_PORT, timeout=30)
            if kwargs.get("debug", False):
                server.set_debuglevel(1)
            if self.MAIL_TLS:  # 新增:启用TLS加密
                try:
                    server.starttls()
                    logger.debug("TLS 加密已启用")
                except Exception as e:
                    logger.warning(f"TLS 启动失败: {e},继续使用普通连接")

b. 在 Archery 管理界面配置TLS邮件
进入“系统管理” > “配置项管理” > “系统设置”,在工单通知部分配置:

  • MAIL: 切换为ON
  • MAIL_SSL: 切换为OFF(使用TLS时通常关闭SSL)
  • MAIL_SMTP_SERVER/PORT: 填写服务器地址和端口(如587)
  • MAIL_SMTP_USER/PASSWORD: 填写发件邮箱凭据

c. 测试邮件功能
配置保存后,使用旁边的“测试连接”功能发送一封测试邮件,验证配置是否正确。

PART 06. 总结

通过上述步骤,我们完成了Archery从Docker Compose一键部署、基础配置与使用流程的讲解,并深入探讨了“调整查询授权时间”和“添加邮件TLS支持”两个实际改造案例。这些工作使得Archery不仅能快速搭建起来,还能更好地适应企业内部特定的安全和流程要求,真正成为一个得心应手的SQL运维管控平台。

来源:https://www.51cto.com/article/837824.html
上一篇Vite安全漏洞曝光后如何升级修复指南 下一篇凌晨3点系统架构崩溃复盘:过度设计的代价
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
台式机加装固态硬盘怎么选?三星9100 PRO深度解析
业界动态 · 2026-09-01

台式机加装固态硬盘怎么选?三星9100 PRO深度解析

台式机升级存储常受限于系统启动慢、游戏加载卡顿与大文件传输延迟。本文基于三星9100 PRO的PCIe 5 0架构、14800MB s读取、13400MB s写入、2200K 2600K IOPS、1TB~8TB容量、第八代V-NAND与5nm主控、镍涂层散热与DTG技术、散热片版适配及魔术师软件,提供选购判断与安装兼容性要点,帮助读者评估是否值得一步到位升级。

宁德时代2026年中期分红61.8亿元,同比增35%,创历史新高
业界动态 · 2026-09-01

宁德时代2026年中期分红61.8亿元,同比增35%,创历史新高

宁德时代发布2026年中期分红方案,总额达61 8亿元,同比增长35%。本文梳理分红具体安排、历史对比、业绩支撑及分红机制,帮助投资者评估公司现金流实力与股东回报策略。

企业硬盘报废销毁合规指南:如何选择专业机构与处理流程
业界动态 · 2026-08-31

企业硬盘报废销毁合规指南:如何选择专业机构与处理流程

企业硬盘报废面临数据复原与合规风险,需选择具备资质且流程透明的专业机构。本文解析行业乱象,介绍以团体标准为核心的合规销毁流程,涵盖上门收运、消磁粉碎、视频溯源及尾料处置,帮助企业规避泄密责任,确保数据安全闭环。

机密文件销毁找什么机构?认准团标参编与资质合规
业界动态 · 2026-08-31

机密文件销毁找什么机构?认准团标参编与资质合规

机密文件销毁找什么机构?核心在于甄别服务商是否具备正规保密资质及是否参与行业标准制定。本文解析《商业秘密及敏感信息载体销毁通用规范》团标要求,提供筛选销毁机构的实操指南,帮助企业规避数据泄露风险,确保销毁流程合规可溯。

影石Insta360 X6全球首销登顶:8K全景画质与AI创作功能解析
业界动态 · 2026-08-31

影石Insta360 X6全球首销登顶:8K全景画质与AI创作功能解析

影石Insta360 X6全球同步发售即登顶国内外主流平台销量榜首。本文解析其搭载的索尼定制方形大底传感器、4nm AI三芯架构及8K50fps画质,详解3D时光舱、AI导演等独家功能,探讨全景相机从专业工具向大众智能创作设备的演进趋势。