Releases: gxc/gaussdb-ro-mcp
Release list
gaussdb-ro-mcp v0.2.3
Full Changelog: v0.2.2...v0.2.3
gaussdb-ro-mcp v0.2.2
gaussdb-ro-mcp v0.2.2
安全加固与工程修复版本。
只读强制加固(fail-closed)
- 事务只读生效验证:每条查询在
SET LOCAL TRANSACTION READ ONLY之后、执行之前,回读SHOW transaction_read_only校验——若只读设置被中间代理剥离/忽略,查询被拒绝而非在可写事务中执行(fail-closed:宁可拒绝服务,不可静默失去保护) - 残留事务清理:服务端复用会话若残留活动/中止事务,在
BEGIN前按协议状态位ROLLBACK清理(活动事务内BEGIN仅产生 WARNING,查询会并入外来事务、COMMIT替人提交);入池连接(AfterConnect)同样先清理再设置会话参数 - 收尾失败不丢数据:COMMIT 阶段失败(如近超时查询在收尾时 ctx 耗尽)不再丢弃已完整取回的结果——
execute_select结果附warning字段说明提交失败;收尾 ROLLBACK 使用独立 context 确保不带事务的连接归还连接池 - 排空错误不再丢失:截断场景下结果集关闭/排空阶段的错误不再被误标为"成功截断"
其他修复
- guard:
E前缀不再误用于双引号——SELECT e"x"(列 + 引号别名)等合法 SQL 不再被误拒为U&"…"转义标识符 - config:时长溢出边界修正(
>=,9223372036.8547758s一类值不再回绕为负);字符串形式负时长显式报错;空/纯注释配置给出可操作错误;pool_max_conns超界校验;密码含://的 keyword=value DSN 不再丢失 sslmode;引号感知的 DSN 参数检测(sslmode / connect_timeout 识别统一口径) - db:分区探测 singleflight 化(并发只触发一次探测、不持锁跨网络往返);
ListTables截断时补报total_count;float32 有限值不再精度放大;describe_table恢复对序列/索引等对象的探查(kind 原样返回) - 仓库构建修复:
go.mod与两个 vendor 源文件此前被 gitignore 规则误伤未入库,导致 clone 后无法构建——已补齐并加反向规则防止复发(v0.2.1 及之前的源码发布存在此问题,从源码构建的用户必须使用本版本) - 输出微调:
--version仅输出版本号(最新版本地址保留在--help中)
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-linux-arm64 |
ARM64 |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.2.2静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt。
兼容性
配置文件与 v0.1.x / v0.2.x 完全兼容;适用于 GaussDB 集中式与分布式实例、openGauss。
完整变更:v0.2.1...v0.2.2
gaussdb-ro-mcp v0.2.1
gaussdb-ro-mcp v0.2.1
补丁版本:发布产物改为无版本号命名,使 releases/latest/download/<文件名> 固定下载链接始终指向最新版本。连接超时配置修复。
变更
- 产物命名:二进制文件名不再携带版本号(
gaussdb-ro-mcp-linux-amd64/gaussdb-ro-mcp-linux-arm64),固定下载链接自此可用:
https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64 - 修复:URL 形式 DSN(
?connect_timeout=1)中显式配置的connect_timeout此前会被服务级默认值静默覆盖,现已正确生效(issue 评审发现,含回归测试) - 文档:README 安装命令改用固定链接;补充实例级
connect_timeout配置说明
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-linux-arm64 |
ARM64 |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/latest/download/gaussdb-ro-mcp-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.2.1静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt。
兼容性
适用于 GaussDB 集中式与分布式实例、openGauss。
完整变更:v0.2.0...v0.2.1
gaussdb-ro-mcp v0.2.0
gaussdb-ro-mcp v0.2.0
新增 GaussDB 分布式版支持(重大变更,建议分布式实例用户升级)。
GaussDB 分布式版支持
GaussDB 分布式版仅支持事务级只读设置,此前版本的会话级只读机制(default_transaction_read_only 启动参数)在分布式实例上于连接建立阶段即被拒绝(SQLSTATE 55P02)。
v0.2.0 改为通用的事务级方案,所有查询统一在显式只读事务中执行:
BEGIN;
SET LOCAL TRANSACTION READ ONLY;
-- 执行查询操作
SELECT ...;
COMMIT;- 只读事务由服务端拒绝事务内一切写操作(包括函数内部的写),该方式在集中式/主备与分布式实例上通用
BEGIN失败时先ROLLBACK清理服务端复用会话的残留事务(含中止事务)再重试一次- 移除会话级只读机制;入池连接仅设置
SET statement_timeout test_connection的只读状态改为在只读事务内回读(恒为on)- 已在真实 GaussDB/openGauss 实例上完成集成验证:连接正常、只读事务内写入被服务端拒绝(SQLSTATE 25006)、正常查询不受影响
其他变更
- 修复 GitHub issues #1–#16(含 4 项 SQL 校验层安全修复,详见 v0.1.3 Release 说明)
--help增加详细说明、问题反馈与最新版本地址;--version附带最新版本地址- README 增加反馈与贡献章节;安装方式统一为
sudo install -Dm 755到/usr/local/bin - 全仓测试覆盖率 90%+(tools 100% / config 100% / guard 99.5% / db 97.8% / cmd 94.6%)
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-v0.2.0-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-v0.2.0-linux-arm64 |
ARM64 |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.2.0/gaussdb-ro-mcp-v0.2.0-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.2.0-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.2.0静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt。
兼容性
配置文件与 v0.1.x 完全兼容,无需修改;建议分布式实例用户从 v0.1.3 直接升级到本版本。
完整变更:v0.1.3...v0.2.0
gaussdb-ro-mcp v0.1.3
gaussdb-ro-mcp v0.1.3
修复 GitHub issues #1–#16,含 4 项安全修复,建议所有用户尽快升级。
安全修复(重要)
- #1 guard 字符串边界错位绕过:
E''/U&''转义判定改为逐字符紧邻判定。修复前形如SELECT e, '\', set_config(...)的语句可把危险函数调用藏进 guard 认定的"字符串"里绕过拦截(服务端实际执行) - #2 引号标识符绕过黑名单:
"dblink"(...)、"set_config"(...)等引号包裹的函数名不再绕过黑名单;U&"…"Unicode 转义标识符整体保守拒绝 - #3 咨询锁黑名单修正:改为
pg_advisory*/pg_try_advisory*前缀通配,覆盖此前遗漏的pg_try_advisory_*系列(咨询锁在只读事务中合法,原实现可致持久 DoS) - #4 连接超时保障:
statement_timeout改在只读校验(含残留事务 ROLLBACK 回退)完成后设置,避免连接无服务端超时入池
其他修复
- test_connection:只读状态为
off时ok正确报告false并附错误说明(此前误报ok:true) - describe_table:各段查询失败统一输出
<段名>_error键,不再与"无数据"混淆 - execute_select / 元数据查询:重复列名去重(
id、id_2…)不再静默丢数据;空结果返回[]而非null;NaN/±Inf 转字符串避免 JSON 序列化失败 - 配置:拼错的 YAML 键现在大声报错(不再静默用默认值);空列表项不再 panic;密码含空格/@ 时 DSN 正确转义;新增实例级
connect_timeout且不再覆盖 DSN 显式值;blocked_functions匹配规则文档与实现对齐 - 其他:亚毫秒
statement_timeout钳制为 1ms;分区探测失败可重试;ListTables增加 SQLLIMIT;ResolveTable限定 relkind;SIGINT/SIGTERM 以退出码 0 优雅退出;main重构为可测结构;全仓测试覆盖率 90%+(聚合 ~94%)
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-v0.1.3-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-v0.1.3-linux-arm64 |
ARM64(鲲鹏/飞腾等) |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.3/gaussdb-ro-mcp-v0.1.3-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.3-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.1.3静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt。
兼容性
- 配置文件与 v0.1.x 完全兼容;两处有意收紧:未知 YAML 键从此前"静默忽略"变为启动报错(拼写错误应尽早暴露);
blocked_functions非空仍为整体替换默认黑名单(已在文档中显著标明) - 拆分字段实例的内部 DSN 生成改为 URL 形式(密码转义),对外行为与工具接口不变
完整变更:v0.1.2...v0.1.3
gaussdb-ro-mcp v0.1.2
gaussdb-ro-mcp v0.1.2
质量与测试强化版本:全仓测试覆盖率提升至 90% 以上,无功能性变更,与 v0.1.1 配置完全兼容。
变更
- 测试覆盖率 90%+(聚合 94.2%):新增极简 GaussDB 线协议 mock 服务端(
internal/dbtest),无需真实数据库即可验证只读会话强制、元数据查询与全部 MCP 工具;覆盖 55P02 修复的启动参数下发、回退分支与残留事务场景 main重构:启动流程提取为可返回错误的start()(行为不变),便于进程内测试- 安装文档:安装步骤改用
sudo install -Dm 755安装到/usr/local/bin,接入示例路径同步更新
各包覆盖率:cmd 96.2% / config 97.9% / db 93.4% / guard 95.9% / tools 91.6%。
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-v0.1.2-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-v0.1.2-linux-arm64 |
ARM64(鲲鹏/飞腾等) |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.2/gaussdb-ro-mcp-v0.1.2-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.2-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.1.2静态链接(CGO_ENABLED=0),无运行时依赖。完整性校验见附件 SHA256SUMS.txt。
兼容性
无需修改配置,与 v0.1.0/v0.1.1 配置文件完全兼容;适用于华为云 GaussDB(集中式/分布式)与 openGauss。
完整变更:v0.1.1...v0.1.2
gaussdb-ro-mcp v0.1.1
gaussdb-ro-mcp v0.1.1
修复华为云 GaussDB 连接失败问题,建议所有用户升级。
修复
- 连接初始化报 SQLSTATE 55P02(
default_transaction_read_only不能在事务中修改)
部分华为云 GaussDB 内核(如 Kernel 503.1.0.SPC2300)禁止在事务中修改该参数,且服务端复用的会话可能残留事务状态,导致建连后执行SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY失败。
现改为将default_transaction_read_only=on随启动包在会话初始化时下发(先于任何事务生效);入池前仍回读SHOW transaction_read_only验证,未生效时先ROLLBACK清理残留事务、再回退会话级 SET 重试,仍不满足才拒绝连接入池。服务端只读兜底语义不变。
下载与安装
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-v0.1.1-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-v0.1.1-linux-arm64 |
ARM64(鲲鹏/飞腾等) |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.1/gaussdb-ro-mcp-v0.1.1-linux-amd64
sudo install -Dm 755 gaussdb-ro-mcp-v0.1.1-linux-amd64 /usr/local/bin/gaussdb-ro-mcp
gaussdb-ro-mcp --version # v0.1.1静态链接(CGO_ENABLED=0),无运行时依赖,安装到 /usr/local/bin 后即可直接复制到内网服务器使用。完整性校验见附件 SHA256SUMS.txt。
兼容性
无需修改配置,与 v0.1.0 配置文件完全兼容;适用于华为云 GaussDB(集中式/分布式)与 openGauss。
完整变更:v0.1.0...v0.1.1
gaussdb-ro-mcp v0.1.0
gaussdb-ro-mcp v0.1.0
面向编码代理(Claude Code、OpenCode 等)的 GaussDB 只读 MCP 服务器,基于华为云官方 GaussDB Go 驱动,stdio 传输,内网非 SSL 场景。
下载
| 文件 | 架构 |
|---|---|
gaussdb-ro-mcp-v0.1.0-linux-amd64 |
x86_64 |
gaussdb-ro-mcp-v0.1.0-linux-arm64 |
ARM64(鲲鹏/飞腾等) |
curl -LO https://github.com/gxc/gaussdb-ro-mcp/releases/download/v0.1.0/gaussdb-ro-mcp-v0.1.0-linux-amd64
chmod +x gaussdb-ro-mcp-v0.1.0-linux-amd64
./gaussdb-ro-mcp-v0.1.0-linux-amd64 --version # v0.1.0静态链接(CGO_ENABLED=0),无运行时依赖,可直接复制到内网服务器使用。
功能(5 个只读 MCP 工具)
test_connection— 连通性测试(版本/库/用户/只读状态/延迟)list_schemas/list_tables— schema 与表/视图清单describe_table— 表结构、约束、索引定义、视图定义 SQL、分区清单execute_select— 只读 SELECT(行数上限、超时、截断标记)
只读保障(三层纵深防御)
- SQL 静态校验:仅放行单条 SELECT/WITH;拦截 DML/DDL(含 CTE 内写语句)、SELECT INTO、行锁、多语句与危险函数(set_config、dblink* 等)
- 会话级强制:每条连接
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY并回读验证,服务端兜底拒绝写入 - 部署建议:配套只读账号最小权限授权 SQL(见 README)
多数据源
单个 YAML 配置文件支持多个 GaussDB 实例,工具调用时以 instance 参数选择;默认 sslmode=disable(内网非 SSL)。
兼容性
华为云 GaussDB(集中式/分布式)与 openGauss;已对 openGauss 6.0 完成只读强制、工具端到端与 stdio 子进程冒烟测试。
配置文件示例见仓库 gaussdb-ro-mcp.example.yaml,Claude Code / OpenCode 接入方式见 README。