前言¶
在 DeepSeek Harness(Cordis)里给智能体接数据库工具时,模型会自行拼 SQL。常见做法是事后审计或静默改写语句,前者拦不住执行,后者容易让模型误以为结果完整。下面介绍社区插件 dsh-plugin-sql-security-validate:在工具执行前用 AST 解析每条 SQL,命中策略则拒绝执行(不改写),并把 SQL_PERMISSION_DENIED 与具体被拒资源返回给模型,便于改字段、换口径或向用户说明权限不足。
这是什么¶
dsh-plugin-sql-security-validate 是 maintainer huangzuting 发布的 DSH 通用 AI 数据库权限管控插件,分类为 admin-security。插件 ID 为 dsh-plugin-sql-security-validate,适用 DeepSeek Harness(Cordis),仓库在 DSH 0.2.x 上验证;package.json 版本为 1.0.0-rc.1,协议 MIT。GitHub 仓库当前约 1 star。
它只拦截经已注册工具进入数据库、由 Agent 生成的 SQL,不负责 MCP 服务层、网络层或数据库账号认证,也不覆盖绕过注册工具直连库的平台路由。
核心功能¶
拦截与拒答,不改写¶
对配置范围内的工具调用,插件从指定参数键收集 SQL,经 node-sql-parser(仓库 vendor/ 内 vendored 5.4.0)做 AST 解析,汇总表、列资源后与本地(及可选远程)策略合并。任一资源被拒则调用不执行,返回结构化原因(被拒表/列、安全模式、策略来源),错误码为 SQL_PERMISSION_DENIED。
黑白名单与元数据发现¶
Settings → SQL 权限校验 中可选模式:
- Blacklist(默认):除名单外均可执行;适合先跑通再补敏感表列。
- Whitelist(配置项
securityMode: whitelist_emulate):仅名单内资源可执行,无需外部服务即可在面板维护列表。
白名单表示例:demo.user(库表)、demo.user_private.phone(单列)。README 要求写 database.table,裸表名会匹配各库同名表;可设 strictDatabaseQualification: true 收紧裸名授权。
DESCRIBE / SHOW CREATE TABLE 按表管控:允许读的表可看结构,不允许的表仍被拒。allowSchemaDiscovery 默认 true,允许无表名的 SHOW TABLES / SHOW DATABASES;表名敏感时可关闭。
工具范围与严格守卫¶
targetToolPrefixes 限定只检查前缀匹配的工具(MCP 工具名形如 mcp__<server>__<tool>);includeNonMcpSqlTools 可扩展至前缀外工具。sqlParamKeys 指定哪些参数键当作 SQL 解析。
可选 enableStrictGuardMode:通过 ctx.tools.guard() 做单调守卫,避免链上后续插件覆盖拒答结果。
远程策略与审计¶
白名单可完全离线。可选 remotePolicy 从中心服务拉策略;请求失败时 fail closed。审计默认开启,内存环形缓冲;可写 JSONL(默认 $DSH_HOME/sql-security-validate/audit.jsonl),audit.redactSql 默认不脱敏字面量。
决策流程(概要)¶
Agent 发出 tool call
→ 执行前 hook(或 strict 模式下的 guard)
→ 从配置的参数键收集 SQL
→ AST 解析表、列
→ 合并本地/远程策略
→ 拒答则 SQL_PERMISSION_DENIED,不执行
默认 failOnParseError: false:解析器无法识别的语句会放行;设为 true 更安全,但可能误拒部分 legacy MySQL 写法。
安装与启用¶
从插件市场或 GUI¶
在 DSH Web GUI 的 Plugin Market 或 Settings → Plugins 安装 bundle;也可在会话里让 Agent 安装本地目录,例如:
Install the bundle from C:\path\to\dsh-plugin-sql-security-validate
bundle 自带 cordis.patch.yml,会插入名为 sql-security-validate 的配置行;按 README 无需额外配置即可启动。安装后插件默认启用。
从源码¶
git clone <repository-url>
cd dsh-plugin-sql-security-validate
node tests/unit.mjs # verify the checkout is intact
随后在 DSH 中将该目录作为 bundle 安装。Node 引擎要求见 package.json:^22.19.0 || >=24.0.0。
典型用法¶
- 启用插件(安装后默认已开)。
- 打开 Settings → SQL 权限校验。
- 选择 Blacklist 或 Whitelist,在
localBlacklist/localWhitelist的 tables、columns 中维护条目。 - 让 Agent 使用已注册的数据库工具;每轮结束可在 turn 卡片查看当轮被拒 SQL 及命中的策略项。
生产环境可按需打开 enableStrictGuardMode、failOnParseError,关闭 allowSchemaDiscovery,并配置 audit.logPath 与 remotePolicy。
适用场景与注意¶
适合:ChatBI、运维问答等 Agent 经 DSH 工具执行 SQL,需要在应用层做表列级读权限、且希望模型根据明确拒因自修正的场景。
边界(README 设计说明,非缺陷):仅 registered tools;默认 schema 发现会暴露库表名;审计 SQL 默认明文;vendored 解析器需自行跟进上游安全更新(见仓库 SECURITY.md)。
安全提示:插件以当前 DSH 进程权限运行,策略再严也不能替代数据库账号与网络隔离。安装前请阅读源码与 MIT 许可证,确认 bundle 来源可信。社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,属社区「一切皆插件」生态中的独立条目。