失败朝严
一道闸自己出了问题,结果倒向更严的那一侧:规则表读不出来、一个角色都没有,结论都是拒绝加最高风险。代码给这条原则编了号,ED3。它不是无条件的 —— 两条例外在安全页。
gateway/risk.go:946 · bootstrap/script_scan_engine_test.go:13 · 例外见安全页
面向这样一类团队:数据库不止一台、动手的人不止一个、出了事要说得清是谁按什么规则跑了什么。
下面四条都能在代码或者架构决策记录里找到出处 —— 每条后面那一行就是。
一道闸自己出了问题,结果倒向更严的那一侧:规则表读不出来、一个角色都没有,结论都是拒绝加最高风险。代码给这条原则编了号,ED3。它不是无条件的 —— 两条例外在安全页。
gateway/risk.go:946 · bootstrap/script_scan_engine_test.go:13 · 例外见安全页
六条入口落到同一条判定链与同一条审计链,开放接口也不例外。这条原则是被事故教出来的:异步执行通道曾经让在终端里被拦下的人,改成后台任务就跑掉。
service/async_exec.go:48 · handler/openapi.go:19 · ADR 0006 / ADR 0012
判定回传的是机器可读的规则引用,不是一句「被拒绝了」:命中哪一条、属于哪一档、出自哪里。那 87 条规范审查规则同理:引自公司规范的每一条都标着出处段落。
review/builtin.go:13-33 · review/review.go:307 · model/rule_ref.go:103
系统判定、系统记录,但按下执行的始终是一个具体的人 —— 三条路形状不同,不能压成一句。终端工单:批准只是授权,得有人回到审批页自己按执行,每一道闸按实际按按钮的那个人重算(ADR 0010)。发布单:执行归流水线的执行阶段,没人确认就停在「等确认」,确认后的复判按发起人的角色算 —— 正好相反。执行窗口单与导出单根本没有可执行的命令。
ADR 0010 · service/approval_execute.go:68 · service/pipeline.go:752
| 控制台前端 | React 19 · TypeScript 5.7 · Vite 6 · Zustand 5 · TanStack Query 5 · React Router 7 · react-i18next 15 · xterm.js 5.5 · lucide-react |
|---|---|
| 后端 | Go 1.25 · Gin v1.10.0 · GORM v1.25.12 · gorilla/websocket v1.5.3 |
| 密码学 | bcrypt · AES-256-GCM · HMAC-SHA256 · TOTP |
| 网关自身的存储 | PostgreSQL 16 —— 开发与生产同一种 |
| 网关连接的目标库 | MySQL / PolarDB / TiDB / MariaDB · PostgreSQL / GaussDB (DWS) · Oracle |
下面几个数是对着 main 分支实测的,不是从 README 抄的 —— 那几条已经落后于代码。
| 后端测试 | 311 个测试文件、993 个测试函数,其中 183 个在 internal/bootstrap 下,走 httptest 的黑盒回归 |
|---|---|
| 控制台前端测试 | 291 例单测(36 个文件)、116 例端到端(10 个文件) |
| 架构决策记录 | 17 份,在 docs/adr/ 下 |
这一页原来宣布了一个开源协议,而那句话没有出处。核下去:db-gateway 里没有 LICENSE 文件,README 没有许可证段落,git 历史里也查不到被删掉的。一个没有 LICENSE 文件的仓库,法律上不是「可以自由使用」,所以这一页宁可空着。
仓库在 GitHub 上。工单与 PRD 是跟着代码走的本地 markdown,代码审查的缺陷记在 GitHub Issues,架构决策在 docs/adr/,现在 17 份。要说在前头:仓库里没有 CONTRIBUTING,也没有 issue 模板。
打开仓库