浏览 AI 知识库

数据库 MCP 先用只读账号验证什么,再考虑写权限

数据库 MCP 第一次接入应使用只读账号和限定 schema,先检查表结构与查询行为。只有明确业务需要、审批和回滚条件时,才讨论写权限。

按实际操作顺序推进

每完成一段就检查当前输出,确认结果符合预期后再继续。

  1. 01准备动手前,把材料和不能改的部分定下来
  2. 02执行第一次连接使用脱敏测试库、专用只读账号和两条小查询
  3. 03检查为什么“账号只读,查询仍拖垮数据库”还不能交付
  4. 04完成只读角色、查询结果与升级条件通过哪些检查才算完成
从手头这一份材料开始

为了看一张表结构,没必要让工具拿到生产管理员账号

数据库 MCP 直接使用生产管理员账号,只为查看一张表结构。一次错误工具调用就可能修改或删除真实数据。

  • 环境、角色和 schema 最小化
  • 写入反例被拒绝
  • 查询成本与结果均验证
本例材料

动手前,把材料和不能改的部分定下来

需要确认本例内容
现有材料测试环境 PostgreSQL,只读角色 `mcp_reader`,仅授权 reporting schema;目标查询最近 10 条脱敏订单。
不能越过的边界先只读账号与非生产环境;限制 schema、行数、超时和成本;写权限需要新的风险评审和人工确认。
要交付的结果只读角色、查询结果与升级条件
实际操作

数据库 MCP 怎么用,从“创建最小角色”开始做

创建最小角色

只授予目标库的 SELECT 或更窄视图,限制来源网络、并发、超时和可见字段。

准备测试查询

从版本、当前库、表结构或限制行数的非敏感查询开始,不运行全表导出。

检查结果与日志

确认账号、目标实例、实际 SQL、行数、耗时和错误,敏感值在日志和模型输出中脱敏。

验证写操作被拒绝

在安全测试对象上确认 INSERT/UPDATE/DELETE 不可用,不能只相信权限名称。

定义升级条件

若任务确需写入,另建受限角色、事务、预览、审批、备份和回滚,不直接给管理员权限。

连接与测试输入

第一次连接使用脱敏测试库、专用只读账号和两条小查询

输入项教学环境中的实际值安全边界
目标环境PostgreSQL 16 测试副本;数据库 analytics_test不连接生产实例,不复用管理员账号
账号与范围analytics_reader;仅 reporting schema 的 SELECT密码通过本地密钥环境提供,不写进提示或配置截图
允许对象reporting.monthly_orders_masked 视图姓名、手机号和完整订单明细不可见
身份查询`SELECT current_database(), current_user, version();`核对实际数据库、账号和版本
样本查询`SELECT month, order_count FROM reporting.monthly_orders_masked ORDER BY month DESC LIMIT 20;`限制字段与行数,记录耗时和请求 ID
拒写测试在隔离测试对象尝试 INSERT应返回权限拒绝,且复查行数无变化

主机、账号和对象为教学输入。真实凭证不得进入文章、提示、截图或仓库,拒写测试也只能在获准的隔离对象进行。

数据库只读实测

从当前库和表结构开始,不从全表导出开始

查询限制验收禁止
身份返回当前数据库、用户和版本与目标实例一致不能只看连接成功
结构读取指定 schema 的表名只显示允许范围不列出其他库和系统表
样本`SELECT ... LIMIT 20` 的脱敏视图行数、耗时和字段可回查不导出完整敏感列
写测试安全测试表尝试 INSERT权限拒绝且无行变化不在生产对象试写

SQL 仅为方法示例;真实字段、schema、账号和脱敏策略由数据负责人确认。

最终输出

完成后的只读角色、查询结果与升级条件

验证 `current_user` 为 mcp_reader,UPDATE/DELETE 被拒绝;SELECT 仅能访问 reporting,查询带 LIMIT 10 与 statement timeout。结果与数据库客户端同查询一致,连接串未出现在日志。

常见失败

为什么“账号只读,查询仍拖垮数据库”还不能交付

账号只读,查询仍拖垮数据库

原因
大扫描和笛卡尔积不需要写权限也有风险
怎么改
增加超时、行数与资源限制,先 EXPLAIN 或在副本测试
验收方式

只读角色、查询结果与升级条件通过哪些检查才算完成

进一步核对

常用场景:参考资料与核对入口