<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>最小权限 on DataAgentX</title><link>https://e343c64b.dataagentx.pages.dev/zh-cn/tags/%E6%9C%80%E5%B0%8F%E6%9D%83%E9%99%90/</link><description>Recent content in 最小权限 on DataAgentX</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 12 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://e343c64b.dataagentx.pages.dev/zh-cn/tags/%E6%9C%80%E5%B0%8F%E6%9D%83%E9%99%90/index.xml" rel="self" type="application/rss+xml"/><item><title>Data Agent 上线前，权限应该管到哪里</title><link>https://e343c64b.dataagentx.pages.dev/zh-cn/tech/20260912-governance-and-security/</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><guid>https://e343c64b.dataagentx.pages.dev/zh-cn/tech/20260912-governance-and-security/</guid><description>&lt;p&gt;区域经理和总部分析师问同一句“渠道转化怎么样”，合法答案可能完全不同。即使数据库查询做了行级过滤，缓存、导出文件或报告分享仍可能把总部数据交给区域用户。&lt;/p&gt;&#10;&lt;p&gt;治理不能是一段“请勿泄露敏感信息”的系统提示词。它必须贯穿资产发现、模型上下文、工具调用、执行环境、结果交付和业务动作，并由模型无法覆盖的可信系统强制实施。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://e343c64b.dataagentx.pages.dev/images/articles/governance-and-security/core-zh.svg"&gt;&lt;img src="https://e343c64b.dataagentx.pages.dev/images/articles/governance-and-security/core-zh.svg" alt="Data Agent 从身份到审计响应的治理控制链"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;模型可以解释策略、请求审批和说明拒绝原因，但不能自行授予权限，也不能用“任务很重要”覆盖拒绝决定。&lt;/p&gt;&#10;&lt;h2 id="先画清资产主体和信任边界"&gt;先画清资产、主体和信任边界&lt;/h2&gt;&#10;&lt;p&gt;保护对象不只有原始表。字段说明、向量索引、查询结果、缓存、检查点、日志、图表和下载文件都可能泄露数据。主体包括最终用户、Agent 服务身份、数据平台身份、审批人、接收者与连接器供应方。&lt;/p&gt;&#10;&lt;p&gt;对每条链路都回答：谁发起、代表谁、读取或改变什么、用途是什么、在哪里运行、结果交给谁。外部文档、网页、数据库文本和子 Agent 消息都属于不可信输入；进入上下文不会让它们获得调用工具或修改策略的权力。&lt;/p&gt;&#10;&lt;h2 id="身份需要贯穿整条调用链"&gt;身份需要贯穿整条调用链&lt;/h2&gt;&#10;&lt;p&gt;优先保留最终用户的权限范围。必须使用服务身份时，按租户、业务域、用途和动作缩小能力，并明确由哪个组件实施用户级限制。连接器能够登录，不等于每个用户都有权查看它连接的数据。&lt;/p&gt;&#10;&lt;p&gt;授权输入至少包括主体、租户、资源、字段/行范围、动作、用途、环境、风险等级和策略版本。策略服务返回允许、拒绝或需审批以及有效范围；凭证由服务端管理，不进入提示词。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-sharing"&gt;Microsoft Fabric Data Agent 的分享与权限文档&lt;/a&gt;明确区分 Agent 访问与底层数据权限，并继续实施行列级安全。这支持一个普遍原则：入口分享不能替代源数据授权。&lt;/p&gt;&#10;&lt;h2 id="缓存和交付是最容易遗漏的出口"&gt;缓存和交付是最容易遗漏的出口&lt;/h2&gt;&#10;&lt;p&gt;缓存键不能只有问题文本。至少要绑定租户、有效权限范围、语义版本、数据版本和策略版本，撤权后立即失效。命中缓存仍要授权，否则总部用户的答案可能被区域用户复用。&lt;/p&gt;&#10;&lt;p&gt;“分析师能看”也不代表“报告接收者能看”。导出前按实际接收者检查明细、聚合和小群体推断风险。删除文件中的敏感列，而不是仅在文件名上加“机密”。错误提示也不能泄露无权访问的表名、人员或字段。&lt;/p&gt;&#10;&lt;h2 id="提示注入与过度代理是两种风险"&gt;提示注入与过度代理是两种风险&lt;/h2&gt;&#10;&lt;p&gt;提示注入让不可信内容试图改变 Agent 行为；过度代理则是系统本来就暴露了过多工具、权限或自主性。没有注入，一个拥有删除权限的 Agent 也可能因普通判断错误造成事故。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://genai.owasp.org/llmrisk/llm01-prompt-injection/"&gt;OWASP 关于提示注入的指南&lt;/a&gt;强调组合防御：隔离不可信内容、最小权限、输入输出处理和高风险人工确认。把文档放进引号或再用一个模型检测，不构成安全边界。&lt;a href="https://genai.owasp.org/llmrisk/llm062025-excessive-agency/"&gt;OWASP 关于 Excessive Agency&lt;/a&gt;则把过宽功能、权限和自主性列为风险来源。&lt;/p&gt;&#10;&lt;p&gt;实践上应把只读查询、写回和对外发送拆成不同能力，只注册任务必要的工具，限制目标和参数。内容检测提供信号，工具网关负责强制拒绝。&lt;/p&gt;&#10;&lt;h2 id="审批必须绑定实际动作"&gt;审批必须绑定实际动作&lt;/h2&gt;&#10;&lt;p&gt;不要让审批人只看到“优化投放策略”这种摘要。高影响动作应展示目标对象、参数、数据范围、接收者、依据、预计影响、成本、回滚或补偿方法和有效期。任何实质变化都触发重新审批。&lt;/p&gt;&#10;&lt;p&gt;撤销也有真实边界。发送出去的邮件和被下载的文件通常不能保证收回，跨系统动作可能只能补偿而不能原子回滚。因此系统要区分：可事前阻断、可取消、可回滚、可补偿和不可逆。&lt;/p&gt;&#10;&lt;h2 id="审计与事件响应要能停止真实动作"&gt;审计与事件响应要能停止真实动作&lt;/h2&gt;&#10;&lt;p&gt;审计应连接任务、用户、委派身份、资源、策略、审批、工具参数摘要、执行 ID、结果和接收者。普通日志避免凭证和敏感全文；高风险审计记录需要访问隔离、完整性保护、可靠时间与保留策略。&lt;/p&gt;&#10;&lt;p&gt;事件流程至少包括：发现 → 阻断新调用 → 吊销凭证或冻结任务 → 核对在途和已完成动作 → 保存必要证据 → 通知与修复 → 回归验证后恢复。停止聊天模型不会自动停止正在运行的数据库查询，必须在执行端确认取消。&lt;/p&gt;&#10;&lt;h2 id="上线前需要哪些证据"&gt;上线前需要哪些证据&lt;/h2&gt;&#10;&lt;p&gt;最低测试集应包括：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;不同身份的资产发现、查询、缓存与导出隔离；&lt;/li&gt;&#10;&lt;li&gt;权限撤销后缓存、会话和长期任务是否失效；&lt;/li&gt;&#10;&lt;li&gt;用户输入、文档、OCR、数据库文本和工具响应中的间接提示注入；&lt;/li&gt;&#10;&lt;li&gt;未注册工具、参数扩张和审批绕过；&lt;/li&gt;&#10;&lt;li&gt;凭证是否出现在提示词、错误、日志或制品中；&lt;/li&gt;&#10;&lt;li&gt;高风险动作的参数级审批、幂等和状态回读；&lt;/li&gt;&#10;&lt;li&gt;下载与分享是否按接收者重新授权；&lt;/li&gt;&#10;&lt;li&gt;熔断、吊销和应急演练能否停止实际执行。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;越权误放行率应独立报告，并作为上线阻断项。还要测合法请求误拒和审批负担，但不能靠放宽安全门禁改善体验。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.nist.gov/itl/ai-risk-management-framework"&gt;NIST AI Risk Management Framework&lt;/a&gt;及其&lt;a href="https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence"&gt;生成式 AI Profile&lt;/a&gt;可用于梳理责任、风险、测量和处置，但不会替组织自动满足法规，也不能取代技术控制。&lt;/p&gt;</description></item><item><title>Agent 生成的 SQL，为什么不能直接运行</title><link>https://e343c64b.dataagentx.pages.dev/zh-cn/tech/20260909-controlled-tool-execution/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://e343c64b.dataagentx.pages.dev/zh-cn/tech/20260909-controlled-tool-execution/</guid><description>&lt;p&gt;模型输出一条 SQL，只说明它提出了一个候选动作，并不表示已经获得生产数据库的执行权。即使是 &lt;code&gt;SELECT&lt;/code&gt;，也可能扫描数 TB、读取敏感列、触发外部函数，或者因为错误 Join 返回一份看似合理的结果。&lt;/p&gt;&#10;&lt;p&gt;执行层的任务，是把自然语言意图转换成一个受控操作：在运行前校验，在运行时限制，在运行后核验，并为每次副作用留下可追踪记录。&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://e343c64b.dataagentx.pages.dev/images/articles/controlled-tool-execution/core-zh.svg"&gt;&lt;img src="https://e343c64b.dataagentx.pages.dev/images/articles/controlled-tool-execution/core-zh.svg" alt="执行网关从动作提案到审计记录的控制链"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;生成与授权必须分开。模型可以建议“创建工单”或“运行查询”，真正的工具网关根据身份、策略、参数和风险决定是否允许。&lt;/p&gt;&#10;&lt;h2 id="执行请求需要结构化契约"&gt;执行请求需要结构化契约&lt;/h2&gt;&#10;&lt;p&gt;不要让执行器直接接收一段自由文本。一个最小请求应包含：任务与步骤 ID、调用者与委派身份、工具名和版本、结构化参数、输入产物、语义版本、允许动作、预算、超时、幂等键、审批引用和输出契约。&lt;/p&gt;&#10;&lt;p&gt;工具返回也要标准化：状态、执行 ID、结果引用、行数与截断、成本、Schema、数据水位、警告、可重试标志和审计引用。模型只看到完成下一步所需的结果摘要；凭证、内部错误栈和不相关敏感数据留在可信运行时。&lt;/p&gt;&#10;&lt;h2 id="运行前先过三道门"&gt;运行前先过三道门&lt;/h2&gt;&#10;&lt;h3 id="语法与静态检查"&gt;语法与静态检查&lt;/h3&gt;&#10;&lt;p&gt;解析 SQL 或代码为语法树，拒绝不支持的语句、动态执行、未限定目标和危险库。只靠正则匹配 &lt;code&gt;DROP&lt;/code&gt; 不够：写操作可能隐藏在存储过程、多语句、外部函数或工具参数里。&lt;/p&gt;&#10;&lt;h3 id="语义与数据检查"&gt;语义与数据检查&lt;/h3&gt;&#10;&lt;p&gt;确认表、字段、指标版本、粒度、Join 基数和时间范围符合计划。执行层不重新发明业务口径，但要验证请求引用的契约仍存在、版本兼容、输入数据已就绪。&lt;/p&gt;&#10;&lt;h3 id="策略与资源检查"&gt;策略与资源检查&lt;/h3&gt;&#10;&lt;p&gt;根据最终用户或受限服务身份检查资源、行列范围、用途、地域、环境、读写类型和审批。再估算扫描量、运行时间、并发与外部调用成本。未知成本不是零成本；无法估算时使用更严格限额或要求审批。&lt;/p&gt;&#10;&lt;h2 id="沙箱不是一个开关"&gt;沙箱不是一个开关&lt;/h2&gt;&#10;&lt;p&gt;SQL、Python 和外部 API 需要不同隔离：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;：只读事务、允许对象清单、查询超时、扫描上限、结果行数和敏感列控制。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;代码&lt;/strong&gt;：短期容器、固定依赖、CPU/内存/磁盘上限、无默认外网、只挂载任务所需文件。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;文件工具&lt;/strong&gt;：限定工作目录、文件类型、大小与恶意内容扫描，防止路径穿越。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部 API&lt;/strong&gt;：目标域名和动作清单、短期凭证、参数校验、速率限制和幂等策略。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;隔离环境也要可复现。记录运行镜像、依赖、随机种子、输入版本与工具版本；否则“代码执行成功”无法转化为可复核结果。&lt;/p&gt;&#10;&lt;h2 id="查询成功之后还要验证"&gt;查询成功之后还要验证&lt;/h2&gt;&#10;&lt;p&gt;HTTP 200、进程退出码 0 或 SQL 完成，只代表工具没有报告执行失败。结果仍需检查：返回 Schema 是否符合合同、是否为空或被截断、数据水位是否满足任务、关键不变量是否成立、单位与分母是否正确。&lt;/p&gt;&#10;&lt;p&gt;对高影响查询，可以先 &lt;code&gt;EXPLAIN&lt;/code&gt; 或运行限量探测，再执行完整版本。对工程变更，先生成差异、运行测试和影响分析；授权后执行，再回读目标状态。生成成功、提交成功和最终生效应是不同状态。&lt;/p&gt;&#10;&lt;h2 id="重试必须理解副作用"&gt;重试必须理解副作用&lt;/h2&gt;&#10;&lt;p&gt;只读且确定性的查询在瞬时故障后通常可以限次重试。写操作则必须使用逻辑操作 ID，并核对下游是否真正支持幂等。超时并不等于失败；在未知状态下直接重发，可能创建两个工单、发送两封邮件或重复写入。&lt;/p&gt;&#10;&lt;p&gt;失败至少分为：调用者输入错误、策略拒绝、资源超限、可重试基础设施故障、工具确定性失败、结果验证失败和状态未知。每类错误都有不同去向，不能统一让模型“再试一次”。&lt;/p&gt;&#10;&lt;h2 id="审计记录什么也要知道不记录什么"&gt;审计记录什么，也要知道不记录什么&lt;/h2&gt;&#10;&lt;p&gt;审计事件应连接任务、用户、委派身份、计划步骤、工具版本、参数摘要、策略决定、审批、执行 ID、结果引用和最终状态。高风险动作保存可验证的参数快照。&lt;/p&gt;&#10;&lt;p&gt;普通日志不应记录密钥、完整敏感结果或无需保留的提示词。审计系统本身需要访问控制、完整性保护和保留策略；“有日志”不等于日志足以追责。&lt;/p&gt;&#10;&lt;h2 id="最小上线测试"&gt;最小上线测试&lt;/h2&gt;&#10;&lt;p&gt;上线前至少验证：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;越权表、列、行和工具调用全部被阻断；&lt;/li&gt;&#10;&lt;li&gt;注释、别名、子查询和多语句不能绕过静态规则；&lt;/li&gt;&#10;&lt;li&gt;扫描量、超时、输出行数和并发上限有效；&lt;/li&gt;&#10;&lt;li&gt;沙箱无法访问未授权文件、网络和环境变量；&lt;/li&gt;&#10;&lt;li&gt;相同幂等键不会造成重复副作用；&lt;/li&gt;&#10;&lt;li&gt;超时后的未知状态会先查询而不是盲目重试；&lt;/li&gt;&#10;&lt;li&gt;取消任务能在执行端真正停止，而非只停止聊天界面；&lt;/li&gt;&#10;&lt;li&gt;结果截断、空集、缺失数据和验证失败会被正确标记。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;执行层成熟的标志，不是 Agent 能调用多少工具，而是每个动作都能回答：谁授权、在什么边界内运行、用了多少资源、产生了什么结果、失败后怎样恢复。只有这样，模型输出才可能安全地进入真实系统。&lt;/p&gt;</description></item></channel></rss>