news 2026/11/3 20:08:10

Archery SQL审计平台在RockyLinux8的容器化部署实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Archery SQL审计平台在RockyLinux8的容器化部署实践

1. 为什么选择Archery作为SQL审计平台

在数据库运维领域,SQL审计一直是保障数据安全的重要环节。Archery作为开源的SQL审核平台,相比商业产品具有几个显著优势:首先它支持多数据库类型(MySQL、PostgreSQL、Oracle等),其次提供了完整的工单审批流程,最重要的是具备详细的SQL执行记录和性能分析功能。我在金融行业的数据治理项目中,曾对比过多种方案,最终选择Archery正是看中其灵活的权限控制和完整的操作留痕能力。

传统审计方案通常需要在每个数据库实例单独配置,而Archery通过集中化管理大幅降低了维护成本。其架构设计将审核引擎与执行引擎分离,既保证了操作安全性,又不会对生产数据库造成性能压力。实测在RockyLinux8上部署后,单节点可轻松支撑日均5000+的SQL审核请求。

2. RockyLinux8环境准备

2.1 系统基础配置

RockyLinux8作为RHEL的兼容发行版,其稳定性已得到企业级验证。部署前需要确保:

# 更新系统并安装基础工具 sudo dnf update -y && sudo dnf install -y vim wget curl git # 关闭SELinux(生产环境需谨慎) sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 防火墙放行端口 sudo firewall-cmd --add-port=9123/tcp --permanent sudo firewall-cmd --reload

注意:如果服务器位于公有云环境,还需要在安全组中放行9123端口(Archery默认端口)

2.2 Docker环境部署

虽然RockyLinux8官方仓库提供docker-ce,但版本较旧。推荐使用官方仓库安装最新版:

# 卸载旧版本 sudo dnf remove -y docker* # 安装依赖 sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker引擎 sudo dnf install -y docker-ce docker-ce-cli containerd.io # 配置镜像加速(使用阿里云) sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://<your-aliyun-mirror>.mirror.aliyuncs.com"] } EOF # 启动服务 sudo systemctl enable --now docker # 验证安装 docker --version

3. Archery容器化部署实战

3.1 获取部署文件

官方推荐使用docker-compose方式部署,我们先获取最新编排文件:

git clone https://github.com/hhyo/Archery.git cd Archery/src/docker-compose/

目录结构说明:

  • docker-compose.yml: 主编排文件
  • conf/: 各组件配置文件
  • mysql/: 初始化SQL脚本
  • redis/: 缓存配置

3.2 修改关键配置

需要调整的几个核心参数:

  1. 修改docker-compose.yml中的MySQL密码(约第30行):
environment: MYSQL_ROOT_PASSWORD: YourStrongPassword123!
  1. 调整Redis持久化配置(约第60行):
volumes: - ./redis/data:/data
  1. 设置Archery管理员账号(约第90行):
environment: ARCHERY_ADMIN_USER: admin ARCHERY_ADMIN_PASSWORD: Admin@123

3.3 启动服务集群

执行部署命令:

docker-compose up -d

首次启动会执行以下操作:

  1. 拉取各组件镜像(总计约1.2GB)
  2. 初始化MySQL数据库结构
  3. 加载Redis缓存
  4. 启动Archery应用容器

通过日志观察启动状态:

docker-compose logs -f archery

当看到Application startup complete日志时,表示服务已就绪。

4. 平台初始化配置

4.1 访问与登录

服务启动后,通过浏览器访问:

http://服务器IP:9123

使用前面设置的admin/Admin@123登录。

4.2 数据库实例添加

首次使用需添加待管理的数据库实例:

  1. 进入"资源管理"->"实例管理"
  2. 点击"新增实例"按钮
  3. 填写关键信息:
    • 实例类型:选择MySQL/PostgreSQL等
    • 实例名称:生产环境建议使用业务命名
    • 连接地址:如果是容器内连接,使用服务名(如mysql:3306)
    • 账号密码:具有足够权限的数据库账号

经验:建议为Archery创建专用数据库账号,权限控制在SELECT+SHOW VIEW+PROCESS即可,避免使用root账号

4.3 审批流程配置

进入"系统管理"->"工作流"设置多级审批:

  1. 简单流程:开发->DBA
  2. 复杂流程:开发->测试负责人->DBA->架构师

可根据业务敏感程度设置不同SQL类型的审批路径,比如:

  • DDL语句必须经过DBA审批
  • 数据导出需要业务负责人审批
  • 普通查询可自动通过

5. 日常使用与问题排查

5.1 SQL工单提交流程

典型工作流程示例:

  1. 开发人员在"SQL工单"页面编写SQL
  2. 系统自动进行语法检查和风险提示(如缺少WHERE条件)
  3. 提交后根据预设流程流转审批
  4. 审批通过后,DBA可在"执行"页面查看执行计划
  5. 最终执行结果会记录执行时间和影响行数

5.2 常见问题处理

问题1:容器启动失败检查MySQL容器日志:

docker-compose logs mysql

常见原因是密码包含特殊字符导致初始化失败,解决方法:

  • 修改docker-compose.yml中的密码为纯字母数字组合
  • 删除mysql数据目录重新启动

问题2:无法连接外部数据库测试网络连通性:

docker exec -it archery ping 目标数据库IP

如果容器网络模式为bridge,需要确保:

  • 防火墙放行出站连接
  • 数据库白名单添加Docker网段(通常是172.17.0.0/16)

问题3:审计记录不完整检查配置项:

docker exec -it archery cat /opt/archery/archery/settings.py | grep AUDIT

确保以下参数为True:

ENABLE_AUDIT_LOG = True AUDIT_LOG_ALL = True

6. 性能优化与高可用

6.1 数据库连接池配置

编辑conf/archery/archery.cnf:

[database] max_connections = 50 pool_recycle = 3600

6.2 Redis缓存优化

调整conf/redis/redis.conf:

maxmemory 1gb maxmemory-policy allkeys-lru

6.3 容器资源限制

修改docker-compose.yml,为关键服务添加资源限制:

services: mysql: deploy: resources: limits: cpus: '2' memory: 4G archery: deploy: resources: limits: cpus: '1' memory: 2G

7. 备份与升级策略

7.1 数据备份方案

创建每日备份任务:

# MySQL备份 docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > archery_backup_$(date +%F).sql # 配置文件备份 tar czvf archery_conf_$(date +%F).tar.gz conf/

7.2 版本升级步骤

安全升级流程:

  1. 停止现有服务
docker-compose down
  1. 备份数据和配置
  2. 获取最新代码
git pull origin master
  1. 重建容器
docker-compose up -d --build

我在实际运维中发现,每次升级前需要特别注意检查src/docker-compose/mysql/upgrade目录下的SQL脚本,这些是数据库结构变更脚本,必须按版本顺序执行。曾经因为跳过了一个小版本升级,导致字段缺失引发工单提交异常。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 20:07:30

Godot协程等待机制:从裸await到可取消超时等待库

上周帮一位朋友看他那个小型横版项目&#xff0c;翻到关卡流程脚本时我愣了一下&#xff1a;一个 400 行的文件里塞了三十七处await get_tree().create_timer(...).timeout&#xff0c;还有十几处裸await各种信号&#xff0c;中间夹着两三个queue_free()。我问他这套跑起来稳不…

作者头像 李华
网站建设 2026/11/3 20:03:57

Hadoop在教育大数据中的实践:自闭症儿童个性化教学

1. 项目背景与核心价值自闭症儿童教育一直面临资源分配不均和个性化教学方案缺失的双重挑战。传统教育系统往往采用"一刀切"的教学模式&#xff0c;难以满足自闭症谱系障碍(ASD)儿童的特殊需求。我们团队开发的这套系统&#xff0c;正是要利用大数据技术解决这个痛点…

作者头像 李华
网站建设 2026/11/3 20:03:54

同义词算法实战:从规则到SBERT的工程落地指南

1. 这不是词典查询&#xff0c;而是让机器真正“理解”词语关系的实战路径“同义词&#xff08;近义词&#xff09;算法总结&#xff08;附代码&#xff09;”——看到这个标题&#xff0c;很多人第一反应是&#xff1a;不就是查个《现代汉语词典》或者调用jieba、HanLP的synon…

作者头像 李华
网站建设 2026/11/3 20:03:21

C++悬垂引用与未定义行为的防范实践

1. 悬垂引用&#xff1a;C程序员必须警惕的"定时炸弹"1.1 什么是悬垂引用悬垂引用&#xff08;Dangling Reference&#xff09;就像你拿着过期的电影票——票根还在手里&#xff0c;但对应的座位可能已经被重新分配。在C中&#xff0c;它特指引用了一个已经被销毁的对…

作者头像 李华
网站建设 2026/11/3 20:00:46

工厂直供模式如何加速自动化核心部件迭代

1. 工厂直供模式&#xff1a;自动化核心部件迭代的破局之道在自动化设备制造领域&#xff0c;核心部件的迭代速度往往决定了整机产品的竞争力。传统供应链中&#xff0c;从零部件厂商到设备制造商之间冗长的中间环节&#xff0c;已成为制约创新的主要瓶颈。最近参加行业展会时&…

作者头像 李华
网站建设 2026/11/3 20:00:26

技术债证券化对测试团队的影响与应对策略

1. 技术债证券化现象解析&#xff1a;当技术问题变成金融产品 在软件工程领域摸爬滚打十几年&#xff0c;我见证过各种形式的技术债处理方式&#xff0c;但最近两年出现的"技术债证券化"现象着实让人心惊。这个看似金融创新的方案&#xff0c;本质上是用金融工具包装…

作者头像 李华