Archery:开源SQL审核平台的全面介绍与部署指南
Archery是一个基于Django开发的开源SQL审核查询平台,专为MySQL等数据库管理和开发设计,提供一站式SQL审核、查询、执行和管理解决方案。该项目起源于对数据库操作规范化和安全性的需求,经过多年发展已成为功能完备的企业级数据库管理平台,支持多种主流数据库类型,包括MySQL、Oracle、PostgreSQL、Redis、MongoDB等。本文将从项目概述、核心功能、技术架构、部署指南等方面进行全面介绍。
Archery项目概述与核心价值
Archery是一个开源的SQL审核查询平台,基于Django框架开发,专为MySQL数据库管理和开发而设计。该项目起源于对数据库操作规范化和安全性的迫切需求,旨在为企业提供一站式的SQL审核、查询、执行和管理解决方案。
项目起源与发展历程
Archery项目最初基于archer进行二次开发,经过多年的迭代演进,已经发展成为一个功能完备、架构成熟的数据库管理平台。项目采用现代化的技术栈,包括Django 4.1、Bootstrap、jQuery等前端框架,以及丰富的数据库连接器支持。
核心功能架构
Archery采用模块化设计,主要功能模块包括:
多数据库支持能力
Archery具备强大的多数据库兼容性,支持主流的关系型数据库和NoSQL数据库:
| 数据库类型 | 查询支持 | 审核支持 | 执行支持 | 备份支持 | 数据字典 |
|---|---|---|---|---|---|
| MySQL | ✅ | ✅ | ✅ | ✅ | ✅ |
| Oracle | ✅ | ✅ | ✅ | ✅ | ✅ |
| PostgreSQL | ✅ | ❌ | ✅ | ❌ | ❌ |
| Redis | ✅ | ❌ | ✅ | ❌ | ❌ |
| MongoDB | ✅ | ✅ | ✅ | ❌ | ❌ |
| ClickHouse | ✅ | ✅ | ✅ | ❌ | ❌ |
技术架构优势
Archery的技术架构体现了现代Web应用的最佳实践:
核心价值体现
1. 规范化数据库操作流程
Archery通过工作流引擎实现了SQL操作的标准化流程,包括:
- SQL提交 → 审核审批 → 执行部署 → 结果反馈的完整闭环
- 多级审核机制,支持自定义审核规则和审批流程
- 完整的操作日志记录和审计追踪
2. 智能SQL审核与优化
集成多种SQL审核和优化工具,提供专业的SQL质量保障:
# 示例:SQL审核规则检查
def check_sql_quality(sql_content):
"""
执行SQL质量检查,包括:
- 语法正确性验证
- 性能风险评估
- 规范符合度检查
- 安全漏洞检测
"""
# 使用goInception进行深度SQL解析
audit_result = go_inception.execute_check(sql_content)
# 应用自定义审核规则
custom_rules = apply_custom_rules(audit_result)
# 生成详细的审核报告
report = generate_audit_report(audit_result, custom_rules)
return report
3. 全面的数据库管理功能
Archery提供了一系列实用的数据库管理工具:
| 功能类别 | 具体功能 | 价值描述 |
|---|---|---|
| 实例管理 | 数据库实例配置、连接测试、状态监控 | 统一管理多数据库环境 |
| 账号管理 | 用户权限分配、密码重置、权限审计 | 精细化的权限控制 |
| 数据操作 | 在线查询、数据导出、表结构同步 | 便捷的数据维护 |
| 性能分析 | 慢查询分析、会话管理、锁等待检测 | 深度性能优化 |
4. 企业级安全与合规
Archery在设计上充分考虑了企业级应用的安全需求:
- 身份认证:支持多种认证方式(LDAP、OIDC、钉钉等)
- 权限控制:基于RBAC的精细权限管理
- 操作审计:完整的操作日志和变更记录
- 数据加密:敏感信息加密存储和传输
5. 扩展性与集成能力
项目采用插件化架构,支持功能扩展和系统集成:
实际应用场景
Archery在以下场景中发挥重要作用:
- 金融行业:严格的SQL审核和变更管理,满足合规要求
- 电商平台:高频数据库操作的安全保障和性能优化
- 企业运维:统一的数据库管理平台,降低运维复杂度
- 开发团队:规范的SQL开发流程,提升代码质量
技术生态整合
Archery积极整合业界优秀的数据库工具,形成完整的技术生态:
| 工具类型 | 集成工具 | 功能描述 |
|---|---|---|
| SQL审核 | goInception | 集审核、执行、备份于一身的MySQL运维工具 |
| SQL优化 | SQLAdvisor | 美团开源的SQL索引优化建议工具 |
| SQL优化 | SOAR | 小米开源的SQL优化和重写工具 |
| 数据迁移 | gh-ost | GitHub开源的在线表结构变更工具 |
| 数据归档 | pt-archiver | Percona工具集中的数据归档工具 |
通过深度整合这些专业工具,Archery为用户提供了企业级的数据库管理能力,同时保持了开源项目的灵活性和可扩展性。
平台支持的数据库类型与功能矩阵
Archery作为一款功能强大的SQL审核平台,其核心优势在于对多种数据库类型的广泛支持。平台通过模块化的引擎架构设计,为每种数据库类型提供了专门的处理逻辑,确保在不同数据库环境下都能提供一致的用户体验和强大的功能支持。
支持的数据库类型
Archery目前支持以下14种主流数据库类型:
| 数据库类型 | 引擎标识 | 支持版本 | 主要特点 |
|---|---|---|---|
| MySQL | mysql | 5.6+ | 完整支持审核、执行、备份等全功能 |
| ClickHouse | clickhouse | 20.3+ | 列式数据库,支持查询和审核 |
| goInception | goinception | - | MySQL审核执行工具集成 |
| MsSQL | mssql | 2008+ | Microsoft SQL Server支持 |
| Redis | redis | 3.0+ | 键值存储数据库,支持查询和执行 |
| PostgreSQL | pgsql | 9.4+ | 开源关系型数据库支持 |
| Oracle | oracle | 11g+ | 企业级数据库,支持复杂审核 |
| MongoDB | mongo | 3.6+ | 文档数据库,支持查询和账号管理 |
| Phoenix | phoenix | 4.14+ | HBase SQL层,支持查询 |
| ODPS | odps | - | 阿里云大数据计算平台 |
| Cassandra | cassandra | 3.0+ | 宽列存储数据库 |
| Doris | doris | 0.12+ | MPP分析型数据库 |
| Elasticsearch | elasticsearch | 6.0+ | 搜索引擎,支持查询和索引管理 |
| OpenSearch | opensearch | 1.0+ | Elasticsearch分支版本 |
功能矩阵详细分析
根据平台架构和引擎实现,各数据库类型的功能支持情况如下:
核心功能支持矩阵
| 功能模块 | MySQL | Oracle | MongoDB | ClickHouse | 其他数据库 |
|---|---|---|---|---|---|
| 查询功能 | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 | ✅ 全部支持 |
| SQL审核 | ✅ Inception集成 | ✅ 原生审核 | ✅ 语法检查 | ✅ 语法检查 | ⚠️ 部分支持 |
| SQL执行 | ✅ 完整执行 | ✅ DML/DDL | ✅ 文档操作 | ✅ DML执行 | ✅ 大部分支持 |
| 数据备份 | ✅ Binlog备份 | ✅ 数据泵备份 | ❌ 不支持 | ❌ 不支持 | ❌ 少数支持 |
| 数据字典 | ✅ 完整导出 | ✅ 对象管理 | ❌ 不支持 | ❌ 不支持 | ⚠️ 部分支持 |
| 慢日志分析 | ✅ pt-query-digest | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 会话管理 | ✅ 连接监控 | ✅ 会话管理 | ✅ 操作管理 | ❌ 不支持 | ⚠️ 部分支持 |
| 账号管理 | ✅ 用户权限 | ❌ 不支持 | ✅ 角色管理 | ❌ 不支持 | ❌ 不支持 |
| 参数管理 | ✅ 变量配置 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 数据归档 | ✅ gh-ost/pt-osc | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
引擎架构设计
Archery采用统一的引擎接口设计,所有数据库引擎都继承自EngineBase基类,实现了标准化的操作方法:
class EngineBase:
"""引擎基类定义统一接口"""
def get_connection(self, db_name=None):
"""获取数据库连接"""
def query(self, db_name=None, sql="", limit_num=0, **kwargs):
"""执行查询操作"""
def execute_check(self, db_name=None, sql=""):
"""执行SQL审核检查"""
def execute_workflow(self, workflow):
"""执行工作流操作"""
MySQL引擎深度支持
MySQL作为Archery的重点支持数据库,提供了最完整的功能生态:
Oracle引擎特性
Oracle数据库支持提供了企业级功能:
class OracleEngine(EngineBase):
"""Oracle数据库引擎实现"""
def sqltuningadvisor(self, db_name=None, sql="", **kwargs):
"""SQL调优顾问功能"""
def tablespace(self, offset=0, row_count=14):
"""表空间管理"""
def lock_info(self):
"""锁信息查询"""
MongoDB引擎特性
文档数据库的特殊支持:
class MongoEngine(EngineBase):
"""MongoDB数据库引擎"""
def get_all_databases_summary(self):
"""获取数据库汇总信息"""
def get_instance_users_summary(self):
"""获取实例用户信息"""
def create_instance_user(self, **kwargs):
"""创建实例用户"""
功能启用配置
在settings.py中通过配置控制哪些数据库引擎可用:
# 可用引擎映射配置
AVAILABLE_ENGINES = {
"mysql": {"path": "sql.engines.mysql:MysqlEngine"},
"oracle": {"path": "sql.engines.oracle:OracleEngine"},
"mongo": {"path": "sql.engines.mongo:MongoEngine"},
# ... 其他引擎配置
}
# 实际启用的引擎列表
ENABLED_ENGINES = [
"mysql", "clickhouse", "mssql", "redis", "pgsql",
"oracle", "mongo", "phoenix", "odps", "cassandra",
"doris", "elasticsearch", "opensearch"
]
性能与扩展性考虑
Archery的引擎架构设计考虑了以下性能优化因素:
- 连接池管理:每个引擎实现连接复用机制
- 异步处理:耗时操作通过Django-Q任务队列处理
- 缓存策略:频繁访问的元数据信息进行缓存
- 批量操作:支持批量SQL执行和审核
自定义引擎扩展
平台支持自定义引擎扩展,开发者可以通过实现EngineBase接口来支持新的数据库类型:
class CustomDBEngine(EngineBase):
"""自定义数据库引擎实现"""
name = "CustomDB"
info = "自定义数据库引擎"
def get_connection(self, db_name=None):
# 实现连接逻辑
pass
def query(self, db_name=None, sql="", limit_num=0, **kwargs):
# 实现查询逻辑
pass
这种设计使得Archery能够灵活适应各种数据库环境,为企业级数据库管理提供全面的解决方案。
Docker快速部署与环境配置
Archery作为一款功能强大的SQL审核平台,提供了完整的Docker部署方案,让用户能够快速搭建生产环境。通过Docker Compose编排,可以一键部署包含MySQL数据库、Redis缓存、GoInception审核引擎和Archery应用在内的完整服务栈。
Docker Compose部署架构
Archery的Docker部署采用多容器架构,各个服务组件协同工作:
核心配置文件详解
Docker Compose配置
Archery的Docker Compose配置文件定义了四个核心服务:
version: '3'
services:
redis:
image: redis:5
container_name: redis
restart: always
command: redis-server --requirepass 123456
expose:
- "6379"
mysql:
image: mysql:5.7
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: archery
MYSQL_ROOT_PASSWORD: 123456
goinception:
image: hanchuanchuan/goinception
container_name: goinception
restart: always
ports:
- "4000:4000"
archery:
image: hhyo/archery:v1.12.0
container_name: archery
restart: always
ports:
- "9123:9123"
volumes:
- "./archery/settings.py:/opt/archery/local_settings.py"
- "./archery/soar.yaml:/etc/soar.yaml"
entrypoint: "bash /opt/archery/src/docker/startup.sh"
环境变量配置表
| 环境变量 | 默认值 | 说明 |
|---|---|---|
| MYSQL_DATABASE | archery | Archery使用的数据库名称 |
| MYSQL_ROOT_PASSWORD | 123456 | MySQL root用户密码 |
| REDIS_PASSWORD | 123456 | Redis认证密码 |
| NGINX_PORT | 9123 | Nginx服务监听端口 |
部署步骤详解
1. 环境准备
确保系统已安装Docker和Docker Compose:
# 检查Docker版本
docker --version
# 检查Docker Compose版本
docker-compose --version
2. 下载部署文件
从项目仓库获取Docker部署配置文件:
git clone https://gitcode.com/gh_mirrors/ar/Archery.git
cd Archery/src/docker-compose
3. 自定义配置
编辑本地配置文件archery/settings.py来覆盖默认设置:
# 数据库连接配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'archery',
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



