# 生产环境与写入安全

> 使用只读连接、生产环境保护、SQL 审查、AI 限制和 MCP 策略降低数据库误操作风险。

Source: https://dbxio.com/cn/docs/production-safety

Language: zh-CN

Relative links resolve against https://dbxio.com/cn/docs/production-safety.



DBX 将写入安全拆成多个相互独立的层级：数据库账号权限、连接只读、生产环境保护、危险操作确认、AI 执行规则和 MCP 策略。它们共同降低误操作风险，但不会替代数据库自身的权限、审计、备份和变更审批。

任何客户端侧保护都不是数据库权限的替代品。生产环境仍应使用最小权限账号、数据库审计、可靠备份和团队审批流程。

## 保护层级

| 层级          | 作用                                | 是否可以被上层工具绕过                                        |
| ----------- | --------------------------------- | -------------------------------------------------- |
| 数据库账号权限     | 由数据库服务器最终决定允许读取、写入和管理哪些对象         | 不可以                                                |
| 连接只读        | 在 DBX 核心查询路径阻止可识别的写入，并禁用多个修改入口    | AI、CLI 和 MCP 不能放宽。工作台可在明确确认后解锁 1 或 5 分钟；已保存的设置保持开启 |
| 生产环境保护      | 对整个连接或指定数据库启用生产标记，写入时要求每次重新确认     | 普通确认和 Agent 授权不能永久跳过                               |
| 危险 SQL/命令确认 | 对 DDL、无条件修改、Redis 高风险命令等额外提示或阻止   | 取决于对应设置，但不会放宽只读或生产保护                               |
| MCP 全局策略    | 用连接 allowlist 和三档执行权限约束所有 MCP 客户端 | 客户端环境变量不能扩大已保存的中央策略                                |

## 配置只读连接

创建或编辑连接时，启用**只读连接**。保存后，DBX 会把该标记带入核心查询执行和数据库专属操作中。

只读连接适合：

* 生产查询账号和只允许排查的共享连接
* 只需要浏览 Schema、表数据、文档、键或监控指标的场景
* 提供给 CLI、MCP 或 AI 使用，但不希望产生任何数据修改的连接

只读保护不只是隐藏按钮。对于可识别的 SQL 写入，DBX 会在核心执行路径拒绝请求；MCP、MongoDB、Redis、消息队列和多个专项工作台也会重新检查连接只读状态。

### 临时解锁写入

在桌面端和 Web 工作台中，只读连接不会静默丢弃写入。发生修改操作时会弹出确认对话框，可选择 **1 分钟**或 **5 分钟**（默认 1 分钟）。确认后：

* 该连接在倒计时结束前可以继续写入，无需再次确认
* 只读控件会显示剩余时间；**立即重新锁定**可提前结束窗口
* 已保存的**只读连接**设置不会被关闭
* 解锁一个连接不会影响其他连接
* 窗口到期后，下一次写入会再次提示

MCP 和 CLI 没有确认界面，仍只读取已保存的只读标记，因此不能使用该窗口。

只读分类需要识别 SQL 或命令语义。最可靠的边界仍然是数据库账号本身没有写权限。

## 配置生产环境保护

### 打开连接设置

新建或编辑连接，在连接设置中找到**生产环境**。

### 启用保护

打开**启用生产环境保护**。单数据库连接会直接保护整个连接；支持多个数据库的连接可以选择保护全部数据库或指定数据库。

### 检查保护范围

如果只保护部分数据库，确认列表中包含实际生产库。数据库列表变化后应重新检查配置。

### 验证写入提示

在测试语句或测试环境中确认生产水印和写入确认对话框符合预期，再把同样的设置用于真实连接。

生产保护启用后，工作区会显示生产环境提示。DBX 检测到当前连接、当前数据库或 SQL 显式目标属于生产范围且语句会修改数据或结构时，会打开统一确认对话框。

每次生产写入都需要新的明确决定。确认状态不会保存，也不会因为关闭普通危险 SQL 提示而被跳过。

## 不同入口如何处理写入

| 入口                       | 只读连接                                 | 生产环境保护                        |
| ------------------------ | ------------------------------------ | ----------------------------- |
| SQL 编辑器                  | 拒绝可识别写入，除非用户确认 1/5 分钟解锁窗口            | 写入前显示目标连接、数据库、入口和 SQL，逐次确认    |
| 数据表格                     | 在确认同一解锁窗口前禁用或拒绝保存、删除等修改              | 保存行、删除行等操作进入统一生产确认            |
| 表结构与对象操作                 | 在确认解锁窗口前隐藏或禁用可识别的修改入口                | DDL、对象源码保存、数据库管理等进入统一确认       |
| Schema 对比、SQL 文件、数据生成    | 目标只读时不允许写入                           | 执行生成 SQL 或脚本前进入统一确认           |
| 数据传输                     | 不能使用只读连接作为目标；生产数据库会阻止**先删除目标表再创建**操作 | 危险的表替换操作需要明确确认并显示 DROP SQL 预览 |
| Redis、MongoDB、etcd、消息队列等 | 按系统命令和操作重新检查只读                       | 写入入口继续受生产保护和专项危险操作规则约束        |
| AI Ask                   | 不执行 SQL                              | 不执行 SQL                       |
| AI Agent                 | 不能绕过只读                               | 生产 SQL 返回编辑器，由用户检查并手动执行       |
| MCP                      | 连接只读是所有权限模式的上限；工作台解锁窗口不适用于 MCP       | 生产保护始终是 MCP 策略的上限             |

## AI 的执行边界

### Ask 模式

Ask 模式用于生成、解释、优化或修复 SQL。模型返回的 SQL 不会自动执行，可以复制或放入编辑器后再检查。

### Agent 模式

Agent 可以根据用户意图执行读取操作，并在满足策略时处理有限写入。即使用户对一次普通写入作出确认，授权也只对当前目标和当前操作生效。

当活动数据库处于生产保护范围时，Agent 不会获得自主写入权限。DBX 会把建议 SQL 放回编辑器，并要求用户在生产写入对话框中手动确认。

更多 SQL 分类和模式差异见 [AI 助手](/cn/docs/ai-assistant)。

## MCP 权限

DBX 在**设置 → MCP**中保存一份统一策略，所有 MCP 客户端请求都重新读取这份策略。

| 模式   | 允许的代表性操作                                             |
| ---- | ---------------------------------------------------- |
| 只读   | 查询、元数据读取、列出连接和对象                                     |
| 数据读写 | 普通插入、带有效过滤条件的更新/删除、范围明确的 MongoDB 修改、普通 Redis 写入和连接管理 |
| 完全访问 | 额外允许大范围更新/删除、DDL、`TRUNCATE`、清空数据和高风险管理命令             |

除了执行模式，还应配置**允许的连接**。没有进入 allowlist 的连接不会暴露给 MCP。无论选择哪一档，以下限制始终有效：

* 连接只读
* 生产环境保护
* 数据库账号权限
* 已保存的连接 allowlist

完整配置、客户端示例和兼容行为见 [MCP 集成](/cn/docs/mcp)。

## 危险 SQL 与专项命令

生产保护之外，DBX 还会对部分高风险操作应用额外规则：

* 查询编辑器可以在执行危险 SQL 前显示确认对话框
* Redis 可以阻止或确认高风险命令
* 数据表格、表结构、Schema 对比和数据生成会尽量先展示 SQL
* MCP 的“数据读写”会拒绝无有效范围的更新/删除、DDL、`TRUNCATE` 和无法可靠分类的高风险请求
* 跨引擎传输和批量导入需要单独检查类型映射、目标表和清空选项

## 推荐配置

| 场景        | 建议                                                |
| --------- | ------------------------------------------------- |
| 本地开发库     | 使用普通连接；保留危险 SQL 确认；需要自动化时给 MCP“数据读写”而非“完全访问”      |
| 测试/预发     | 设置明显的连接名称和颜色；开启危险 SQL 确认；限制 MCP allowlist         |
| 生产只查      | 使用数据库只读账号，同时启用 DBX 只读和生产保护；MCP 使用“只读”             |
| 生产变更      | 使用独立最小权限账号；启用生产保护；先预览 SQL；保留备份和审批记录；避免给 MCP“完全访问” |
| 共享 Docker | 设置登录密码、持久化 `/app/data`、限制网络访问，并为每个数据库使用独立账号权限     |

## 已知边界

* SQL 和命令分类采用保守策略，但无法代替数据库服务器权限。
* 存储过程、厂商扩展语法或动态 SQL 的真实影响范围可能无法仅通过文本完全判断。
* 生产保护关注 DBX 内发起的操作；其他客户端仍需要独立权限和审计。
* 配置同步和导出用于迁移 DBX 配置，不是业务数据库备份。

### [创建安全连接](/cn/docs/getting-started)

从连接类型、网络路径、只读和生产范围开始配置。

### [审查数据修改](/cn/docs/data-grid)

了解行内编辑、删除、SQL 预览和保存流程。

### [配置 AI](/cn/docs/ai-assistant)

查看 Ask、Agent、SQL 分类和生产环境行为。

### [配置 MCP](/cn/docs/mcp)

设置连接 allowlist、执行权限和客户端接入方式。

