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 --version3. 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 修改关键配置
需要调整的几个核心参数:
- 修改
docker-compose.yml中的MySQL密码(约第30行):
environment: MYSQL_ROOT_PASSWORD: YourStrongPassword123!- 调整Redis持久化配置(约第60行):
volumes: - ./redis/data:/data- 设置Archery管理员账号(约第90行):
environment: ARCHERY_ADMIN_USER: admin ARCHERY_ADMIN_PASSWORD: Admin@1233.3 启动服务集群
执行部署命令:
docker-compose up -d首次启动会执行以下操作:
- 拉取各组件镜像(总计约1.2GB)
- 初始化MySQL数据库结构
- 加载Redis缓存
- 启动Archery应用容器
通过日志观察启动状态:
docker-compose logs -f archery当看到Application startup complete日志时,表示服务已就绪。
4. 平台初始化配置
4.1 访问与登录
服务启动后,通过浏览器访问:
http://服务器IP:9123使用前面设置的admin/Admin@123登录。
4.2 数据库实例添加
首次使用需添加待管理的数据库实例:
- 进入"资源管理"->"实例管理"
- 点击"新增实例"按钮
- 填写关键信息:
- 实例类型:选择MySQL/PostgreSQL等
- 实例名称:生产环境建议使用业务命名
- 连接地址:如果是容器内连接,使用服务名(如mysql:3306)
- 账号密码:具有足够权限的数据库账号
经验:建议为Archery创建专用数据库账号,权限控制在SELECT+SHOW VIEW+PROCESS即可,避免使用root账号
4.3 审批流程配置
进入"系统管理"->"工作流"设置多级审批:
- 简单流程:开发->DBA
- 复杂流程:开发->测试负责人->DBA->架构师
可根据业务敏感程度设置不同SQL类型的审批路径,比如:
- DDL语句必须经过DBA审批
- 数据导出需要业务负责人审批
- 普通查询可自动通过
5. 日常使用与问题排查
5.1 SQL工单提交流程
典型工作流程示例:
- 开发人员在"SQL工单"页面编写SQL
- 系统自动进行语法检查和风险提示(如缺少WHERE条件)
- 提交后根据预设流程流转审批
- 审批通过后,DBA可在"执行"页面查看执行计划
- 最终执行结果会记录执行时间和影响行数
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 = True6. 性能优化与高可用
6.1 数据库连接池配置
编辑conf/archery/archery.cnf:
[database] max_connections = 50 pool_recycle = 36006.2 Redis缓存优化
调整conf/redis/redis.conf:
maxmemory 1gb maxmemory-policy allkeys-lru6.3 容器资源限制
修改docker-compose.yml,为关键服务添加资源限制:
services: mysql: deploy: resources: limits: cpus: '2' memory: 4G archery: deploy: resources: limits: cpus: '1' memory: 2G7. 备份与升级策略
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 版本升级步骤
安全升级流程:
- 停止现有服务
docker-compose down- 备份数据和配置
- 获取最新代码
git pull origin master- 重建容器
docker-compose up -d --build我在实际运维中发现,每次升级前需要特别注意检查src/docker-compose/mysql/upgrade目录下的SQL脚本,这些是数据库结构变更脚本,必须按版本顺序执行。曾经因为跳过了一个小版本升级,导致字段缺失引发工单提交异常。