Letting AI agents query my databases without ever giving them the credentials
Letting AI agents query my databases without ever giving them the credentials
每当我将 AI 智能体连接到数据库时,都会出现同一个问题:连接字符串存放在哪里?通常答案是“在智能体的配置文件中”,这意味着密码以明文形式存放在一个我不完全受控的工具旁边的 JSON 文件里。我在开源桌面 SQL IDE omni-sql 中采取了不同的路径。该 IDE 已经保存了我的连接信息(密码存储在操作系统的密钥环中)。它还运行一个本地 MCP 服务器,因此智能体是与 IDE 对话,而不是直接与数据库对话。
How it works
MCP 服务器通过回环接口(loopback)上的 STDIO 运行。智能体永远不会接收到主机名、用户名、密码或连接字符串。读取操作(如 getSchemaSummary、getTableIndexes、explainSql、getLatestSqlExecutionError)仅在当前活动标签页的连接上执行。没有工具可以列出或打开其他连接。写入操作绝不会自动执行。proposeSqlEdit 会在桌面上显示修改前后的差异对比。executeSql 会显示连接信息和确切的 SQL 语句,并且仅在我批准后才会运行;该批准仅绑定于当前请求,并在 120 秒后过期。查询结果受到限制(默认 100 行,最大 1,000 行,每条响应 256 KiB)。
What this does and does not protect
它将凭据从智能体的配置中移除。它并不能隐藏数据:SQL 语句、架构名称和允许返回的结果对已连接的 MCP 客户端是可见的,因此请仅在可以接受这种暴露的情况下使用它。已批准的 SQL 仍然可以更改数据,因此对于任何重要操作,我都会使用权限最小化的数据库用户。
Why a desktop approval step
一个可以自行运行任意 SQL 的智能体比一个必须请求批准的智能体风险更大。批准对话框让用户参与到最关键的操作环节中。此外,自上次发帖以来,新功能包括:MongoDB(原生查询加上通过 DuckDB 实现的只读 SQL)、使用 DuckDB 进行本地分析、CSV/S3 导入以及 macOS 安装程序(v0.14.0)。仓库和文档地址:github.com/cccadet/omni-sql(参见 docs/MCP.md)。
Question for readers
读者提问:你会信任这种用于暂存数据库(staging database)的模型吗?你希望批准对话框显示哪些信息?