Security Policy 是运行时强制执行的策略,不是给 Agent 参考的行为建议。当前策略直接用于 Query/DML 执行和运行时 limiter。
2.0.2 策略字段
| 字段 | 默认值 | 有效范围 / 含义 |
|---|---|---|
QueryMaxRows | 1000 | 1–100,000 |
QueryTimeoutSeconds | 30 | 1–600 秒 |
RequireWhereForUpdate | true | UPDATE 必须带条件 |
RequireWhereForDelete | true | DELETE 必须带条件 |
AllowFullTableUpdate | false | 显式允许全表 UPDATE |
AllowFullTableDelete | false | 显式允许全表 DELETE |
DmlMaxAffectedRows | 100 | 1–1,000,000 |
KeyPermitLimit | 120 | 每个配置窗口 1–1,000,000 个请求 |
KeyWindowSeconds | 60 | 1–86,400 秒 |
MaxConcurrentSql | 16 | 1–10,000 个并发 SQL 操作 |
服务会拒绝超出范围的值,而不是静默改成另一套策略。
管理授权
| 操作 | 权限 |
|---|---|
| 读取当前策略 | /runtime/security → view |
| 更新策略 | /runtime/security → edit |
更新策略会写入审计事件并立即替换运行时策略状态。变更还会通过配置的 security-policy synchronization provider 发布,使分布式部署中的实例可以同步策略。
查询限制
QueryMaxRows 通过编译器/运行时策略限制查询输出。QueryTimeoutSeconds 控制运行时查询超时契约。这些都是服务端约束,不依赖客户端是否记得加 LIMIT 或实现取消逻辑。
UPDATE 和 DELETE 条件
默认策略要求 UPDATE 和 DELETE 带条件,并禁止全表修改。
允许全表更新需要明确表达意图:仅关闭 RequireWhereForUpdate 并不等同于启用 AllowFullTableUpdate。除非运维流程确实需要大范围修改,否则建议保留保守默认值。
DML 影响行数上限
DmlMaxAffectedRows 限制数据修改影响范围。它是 Safe DML 审批协议的补充,而不是替代。数据修改仍必须成功完成 parse/validate/compile,并在 MCP DML 路径中完成审批和提交时重新验证。
详见 Safe DML。
MCP 密钥限流
安全策略提供默认的每密钥请求额度和窗口。单个 MCP 密钥可以:
- 继承策略
- 使用自定义覆盖值
- 显式设为无限制
密钥级模式见 MCP 密钥。
SQL 并发
MaxConcurrentSql 是运行时 SQL 并发上限。该限制只作用于单进程,还是由多个实例共同协调,取决于配置的 SQL concurrency provider。
如果限制必须代表整个集群,而不是每个节点单独计算,请使用分布式 provider。