AegisDB
EnglishGitHub
数据库访问网关

让每一条 SQL
都先过闸

六条执行入口,同一条判定链。逐语句给出放行、拦截或转审批,每一次都写进事后改不动的审计链。

一个二进制提供 API 与控制台 · 自身存储只有 PostgreSQL 一种

为什么需要一道闸

数据库权限止步于「能不能连」

它答不出真正要紧的那个问题:这条语句,此时此地,该不该跑。

01

授权的颗粒度不对

账号给得到「能连这台库」,给不到「能跑 SELECT,但 DROP 要转审批」。

02

审批在流程里,不在链路上

工单批完,人还是自己连上去跑 —— 批的是哪条、跑的是哪条,系统都不知道。

03

审计是事后的,而且能改

日志散在各台机器的 general log 里,而能拿到库的人通常也拿得到日志。

判定链

一条语句进来,要过 4 道

4 层规则都按分层存,而分层不是环境:prod-hk 与 prod-sh 挂在同一个分层上,加一台生产实例不复制任何规则行。

  1. 菜单权限通过l2 × terminal
  2. 能力矩阵通过ddl @ prod = approve
  3. 高危命令字典命中DROP @ prod = high
  4. 无 WHERE 拦截通过strictNoWhere @ prod = on
结论转审批
dictDenyPROD 禁止直接执行,需转审批

本演示在浏览器内离线运行,逻辑移植自网关的判定引擎,规则取内置默认种子。你的部署可以改字典、改能力矩阵、改分层属性 —— 判定会跟着变。 多语句按分号拆开逐条判:引号、注释、MySQL 可执行注释与自定义分隔符都认。存储过程整块这类脚本形态不在承诺内 —— 判那种脚本请用产品本身。

核心能力

六件它替你盯着的事

每一件的机制与边界,工作原理页与安全页展开写着。

放行 / 拦截 / 审批

逐语句实时判定

判定挂在六条入口共同调用的那个函数里,不挂在入口上。批量粘贴按分号拆开逐条判,整批取最严的那条。

ADR 0010

审批通过 ≠ 代为执行

终端工单:批准只是授权,得有人回来自己点执行,每一道闸按实际按按钮的那个人重算。发布单:执行归流水线的执行阶段。执行窗口单与导出单:根本没有可执行的命令。

ADR 0015

执行窗口会自己关上

窗口要走审批、按库开,时间过了就不再覆盖当下时刻。它只把「转审批」降成「放行」,deny 从不放宽。

SHA-256

防篡改审计哈希链

hash = SHA256(前一条 hash + 本条内容),而 prev_hash 上一个单列唯一索引让链分叉由数据库拒绝,不靠应用自觉。

ADR 0009

脱敏发生在离开网关之前

整个网关只有两处把用户 SQL 的结果行读出来:终端结果与数据导出,脱敏就挂在这两处。

MySQL / TiDB / DWS / Oracle

上线前先过规范审查

内置 87 条规则:62 条引自公司四份数据库规范并标注出处,25 条平台自加。它不参与执行判定。

控制台复刻

控制台长什么样,不是我们说了算

用真实规则数据渲染的界面级复刻,不是截图。下面这张审批单已经通过了,按钮上写的仍然是「执行」。

审批单
AP-20260919-0042已通过
发起人
linwei@vela.io
目标实例 / 库
PRODprod-mysql-01 · orders

SQL

ALTER TABLE orders ADD COLUMN note varchar(64)

命中规则

dictDenyPROD 禁止直接执行,需转审批

审批链

  • zhaoyun@vela.io
  • wangfang@vela.io

执行前会再判一次规则 —— 这张单可能在待办里停了几个小时。

示意按钮,不可点击 —— 通过 ≠ 代为执行(见工作原理页「第二层」)。

控制台界面复刻 · 非截图

目标库

真实连接,按方言判定

新建实例的引擎下拉即这 7 项,分族看的是「说哪种线协议」,不是厂商。判定看到的永远是你输入的原文 —— 元命令在判定之后才翻译。

下拉里的 PolarDB 指 MySQL 兼容版 —— PolarDB for PostgreSQL 讲的是 PostgreSQL 协议,归另一族。

MySQL 家族

  • MySQL
  • PolarDB
  • TiDB
  • MariaDB

PostgreSQL 家族

  • PostgreSQL
  • GaussDB (DWS)

Oracle

  • Oracle
快速开始

先建一个库,再起两个进程

起跑前要有一台本机 PostgreSQL,服务启动时自己跑完迁移。

后端 · 监听 :8080

# 前置:createdb vela_gateway
cd backend && go run ./cmd/server

前端 · http://localhost:5173

# Vite 把 /api 代理到 :8080
cd frontend && npm install && npm run dev

完整部署步骤 →

把闸门装在链路上

启动时跑不完迁移就退出 —— 一台表不全的网关照样让健康检查变绿,而每个请求都是 500。