没有权限,AI Agent 也读不到数据:NineData 数据库安全管控实测

举报
数据库技术 发表于 2026/10/08 17:22:41 2026/10/08
【摘要】 AI Agent 没有权限还能读取数据库吗?本文通过查询、新增和 DELETE 三条实际操作链路,验证 NineData 如何使用 AccessKey、细粒度权限、SQL 规则、人工审批和审计控制 Agent 的数据库访问,并分析直连旁路、提示注入、规则绕过与凭证泄露等安全边界。
当 AI Agent 可以自行调用工具、查询数据和提交 SQL 时,企业需要验证一个基础问题:原本约束人的数据库权限和审批制度,是否同样约束 Agent?

我们使用一个没有数据源、库和表权限的普通用户,通过 WorkBuddy 调用 NineData Skill,依次测试了三条操作链路:读取无权访问的表、向表中新增数据、提交 DELETE。结果显示,在经 NineData Skill/OpenAPI 访问数据库的路径上,AccessKey 只解决调用身份问题,并不会附带数据库权限;读取、写入和任务提交分别受权限控制;数据变更还要经过 SQL 规则预审和审批。

本文验证的是 NineData 管控链路能否对正常工具调用和越权请求做生效,并在后文单独说明直连数据库、提示注入、规则绕过和 AccessKey 泄露等尚未覆盖的边界。并非对所有 Agent 安全风险的完整渗透测试。

测试范围与环境


本次验证使用的组件和初始条件如下:

项目
测试设置
Agent 客户端
WorkBuddy
数据库访问入口
NineData Skill
调用凭证
NineData AccessKey
测试用户
普通用户
初始数据权限
无数据源权限、无库权限、无表权限
验证操作
查询、新增数据、DELETE
观察位置
Agent 返回结果、权限申请与审批、SQL 任务、规则预审、任务执行结果

测试步骤保持一致:先在 NineData 控制台确认用户权限,再向 Agent 提供 Skill 地址和 AccessKey,由 Agent 发起操作,最后回到 NineData 查看权限提示、审批状态、规则预审和执行结果。

需要强调,以下结果只适用于请求经过 NineData Skill/OpenAPI 并由 NineData 连接数据库的情况。如果 Agent 同时持有数据库连接串,并能使用其他工具绕过 NineData 直连数据库,本文验证的控制链路不会自动覆盖。

准备:AccessKey 负责识别调用身份,不等于数据库权限


测试用户登录 NineData 控制台后,可以在「账户管理—我的权限」中查看模块权限、数据源权限和库表权限。初始状态下,该用户没有数据源、库和表权限,AccessKey 功能也尚未开启。

1.PNG


【截图1:普通用户在「我的权限」中无数据源、库和表权限】
管理员需要先在用户管理中为该用户开启 AccessKey 功能。开启后,用户可以在「账户管理—AccessKey」中新建凭证。AccessKey 用于调用 NineData OpenAPI 和 NineData Skill,与控制台登录密码和底层数据库账号密码相互独立;还可以为不同 Agent 或集成场景创建不同的 AccessKey,分别管理其状态和访问来源。

2.PNG


【截图 2:用户未开通 AccessKey 的提示】
用户联系管理员,管理员在 用户管理 找到该组织下的用户 ,选择 开启 AccessKey
开启之后 用户可以在 账户管理- AccessKey 里面 新建 AccessKey

3.png


【截图 3:创建 AccessKey 的页面】

创建结果页只显示一次 SecretKey。它应保存在受限的密钥管理系统或 Agent 的安全配置中,不能进入代码仓库、日志、文档、截图或对话;遗失后应创建新密钥。

4.png


【截图 4:SecretKey 仅显示一次的安全提示。发布前应确认截图未暴露真实密钥】

这里容易产生一个误解:拿到 AccessKey 并不代表拿到了数据库的读取或写入权限。AccessKey 用来确认“谁在调用”,该身份能访问哪些数据仍取决于 NineData 中已批准的权限。

测试一:查询无权访问的表


初始条件


测试用户已能使用 AccessKey,但没有目标数据源、数据库和表的查询权限。

操作步骤


  1. 在 NineData 工作台下载 Skill。
  2. 向 WorkBuddy 提供 Skill 地址和测试用户的 AccessKey。
  3. 要求 Agent 查询一张当前用户无权访问的表。
  4. 观察 Agent 返回结果,并在 NineData 控制台检查权限状态。

    5.png



【截图 5:NineData 工作台中的 Skill 下载入口】

实际结果


Agent 成功进入 Skill 调用,但 NineData 检查到当前身份缺少目标数据源或表的查询权限,没有返回目标数据,并提示申请相应权限。

6.png



【截图 6:Agent 发起查询后,NineData 返回权限不足并提示申请】

随后,用户进入「账户管理—权限申请与审批」申请目标权限。申请页面可以按数据源、库和表选择授权范围,权限类型包括只读、DML、DDL 和任务提交;有效期可选择 7 天、30 天、60 天、半年、1 年、3 年或自定义时间。建议结合 AccessKey 在 Agent 侧的保存与使用方式,遵循最小权限和短有效期原则,设定安全的权限有效期。

7.png


【截图 7:权限申请页面中的资源范围、权限类型和有效期】

提交后,用户可以在「权限申请与审批」中看到工单状态。审批通过后,使用同一 Agent 再次查询,操作成功并返回结果。

8.png


【截图 8:权限申请状态,以及审批通过后的查询结果】

0.png


这一轮验证了什么


在 NineData 管控路径内,AccessKey、Skill 调用能力和数据读取权限是分开的。Agent 能发起查询,但没有被授予相应数据权限时,平台不会返回目标数据。权限由审批流程授予,并可限制到具体资源、操作类型和有效时间。

这一轮没有验证提示注入能否影响 Agent 的工具选择,但它验证了一个关键下限:即使自然语言指令要求 Agent 查询目标表,只要调用仍经过 NineData,指令本身不能把无权限身份变成有权限身份。

测试二:只有查询权限时尝试新增数据


初始条件


测试用户已经通过上一轮审批获得查询权限,可以读取目标表,但尚未获得完成数据写入所需的 DML 和 SQL 任务提交权限。

操作步骤


  1. 要求 WorkBuddy 向目标表新增一条测试数据。
  2. 观察权限检查结果。
  3. 申请 DML 与 SQL 任务提交权限。
  4. 审批通过后重新提交新增操作。
  5. 在 NineData 的「SQL 任务」页面检查规则审查、审批和执行状态。

实际结果


第一次新增操作没有因为用户已经能查询该表而被直接执行。NineData 提示申请更高权限,说明查询权限不会自动覆盖新增、修改和删除。

9.png


【截图 9:Agent 尝试新增数据后收到权限申请提示】

获得 DML 与 SQL 任务提交权限后,Agent 可以提交新增任务,但任务仍没有立即执行。在 NineData 中可以看到新建的 SQL 任务:任务先经过规则审查,通过后进入审批,审批通过并启动任务后才完成写入。

10.png


【截图 10:新增数据任务在 SQL 任务页面依次经过规则审查、审批和执行】
通过审批之后最终完成 执行:

11.png


这一轮验证了什么


NineData 把“能读表”“能修改表”和“能提交任务”作为不同能力管理。Agent 可以协助发起权限申请或 SQL 任务,但申请动作不等于批准,提交任务也不等于执行。对于希望先从只读 Agent 起步的企业,这种分级可以避免一次查询授权演变成长期写权限。

测试三:提交 DELETE,观察规则预审与审批


初始条件


测试用户已经具备提交相关 SQL 任务的权限,NineData 的 SQL 开发规范将 DELETE 配置为禁止操作。

操作步骤


  1. 向 WorkBuddy 提交删除数据的需求。
  2. 在 NineData 的 SQL 任务中查看规则预审结果。
  3. 在「规范与流程—SQL 开发规范」中核对命中的规则。
  4. 由管理员根据业务需要调整规则强度。
  5. 重新提交任务,完成审批后启动执行。

实际结果


Agent 创建的 DELETE 任务出现在 SQL 任务页面,但规则预审未通过。在 SQL 开发规范中可以看到,当时的平台规则明确禁止 DELETE,因此任务不能继续进入执行阶段。

111.png


【截图 11:DELETE 任务、规则预审未通过及禁止 DELETE 的规则配置】

管理员重新评估需求后,将相关规则从强制阻断调整为风险提醒。调整后任务可以继续推进,但并未直接执行,仍需提交审批。审批通过并启动任务后,删除操作完成,WorkBuddy 返回执行结果,NineData 工作台也保留了任务完成记录。

12.png


【截图 12:规则调整、任务审批、执行完成和 WorkBuddy 返回结果】

这一轮验证了什么


权限检查回答“该身份是否可以发起这类操作”,SQL 规则回答“这条语句是否符合企业规范”,审批回答“本次风险是否允许放行”。三者不是同一个开关。管理员可以按业务需要改变规则强度,但规则放宽后,审批环节仍可继续约束执行。

本轮只验证了测试中这条 DELETE 语句能够被现有规则识别,没有对注释拆分、编码、动态 SQL、存储过程或其他 SQL 变形进行系统模糊测试。对安全要求较高的企业,应使用自己的高风险 SQL 样本库进行专项验证,并持续更新规则。

四层控制各自解决什么问题


经过三轮操作,NineData 在这条访问路径中的作用可以拆成四层。

控制层
本次观察到的机制
解决的问题
不能单独解决的问题
身份与凭证
Agent 使用独立 AccessKey 调用 Skill/OpenAPI
区分调用身份,避免向 Agent 暴露数据库真实密码
无法约束绕过 NineData 的数据库直连;AccessKey 仍需妥善保管
资源与操作权限
按数据源、库、表、只读、DML、DDL、任务提交和有效期授权
防止越权读取,分开读写能力,减少长期过度授权
已授权范围内的错误操作仍需其他控制
SQL 规范与审批
SQL 任务先规则预审,再按流程审批和执行
在执行前拦截或提示高风险 SQL,由人员对关键变更兜底
规则覆盖度取决于配置,审批质量取决于流程和人员
任务记录与审计
平台保留调用身份、时间、目标数据源、SQL 与任务状态等记录
支持复核、追责和合规审查

审计主要是发现和追溯手段,不能替代事前权限控制

这套设计的核心增量,是把 Agent 的工具调用纳入企业已有的数据库治理链路。Agent 提高了发起查询、申请和任务的速度,平台负责验证身份、权限和 SQL,审批人保留关键决策权。

企业更关心的边界问题


1. Agent 如果通过其他工具直接获得数据库连接串怎么办?


NineData 只能管控经过 NineData 的访问。如果 Agent 同时能从环境变量、代码仓库、聊天记录或其他工具中获得数据库连接串,并具备直连网络条件,它可能绕过 NineData。

企业需要同步治理旁路:不要向 Agent 提供数据库真实密码;隔离 Agent 运行环境;限制到数据库的网络路径;统一使用受控 Skill/OpenAPI;扫描代码仓库和日志中的密钥;对数据库侧保留最小权限和连接审计。NineData 是受控入口,不会自动消除环境中已有的其他入口。

2. 提示注入能否诱导 Agent 访问未授权数据源?


提示注入可能改变 Agent 的意图、参数或工具选择,但不能直接修改 NineData 中该身份已经获批的权限。只要请求仍经过 NineData,访问未授权数据源或表时应受到同样的权限检查。

风险在于 Agent 是否还能调用其他不受控工具,或者被诱导在已有权限范围内批量读取不必要的数据。因此,权限设计不能只问“是否允许访问”,还要限制数据范围、操作类型、有效期和每个 Agent 的用途,并对异常调用进行监控。本次测试没有执行专门的提示注入攻击,企业上线前仍应加入这类测试。


3. AccessKey 泄露后,会发生什么?


AccessKey 不会直接暴露底层数据库密码,但泄露者可能冒用该身份调用 NineData,并在该身份已有的权限范围内发起查询或任务。风险大小取决于权限范围、有效期、访问来源限制以及后续审批要求。

因此,AccessKey 应按 Agent 和场景独立创建,授予完成任务所需的最小权限,限制来源并定期轮换;不再使用或发生泄露时应立即禁用。平台审计可以帮助调查,但不能抵消凭证泄露期间已经发生的合法接口调用。

与两种常见方案相比,NineData 增加了什么?


企业通常还会考虑直接给 Agent 一个数据库只读账号,或主要依赖数据库原生权限和审计。三类方案的侧重点不同。

方案
优点
局限或代价
更适合的场景
Agent 直接使用只读数据库账号
架构简单、链路短、查询延迟低
凭证进入 Agent 环境;常以库或实例为单位授权;临时授权、申请审批和跨数据源治理需要另建系统;难以安全扩展到写操作
数据范围固定、纯只读、风险较低的内部场景
数据库原生权限与审计
离数据最近,权限和日志具有基础保障;无需额外代理所有流量
不同数据库的能力和配置方式不一;跨数据库统一授权、工单审批、SQL 规范和 Agent 身份治理成本较高
作为任何架构都应保留的底层防线
NineData Skill/OpenAPI + 平台管控
不向 Agent 交付数据库真实密码;统一管理多数据源;支持细粒度限时权限、SQL 规范、审批和任务审计
增加一个平台与调用链路;审批会带来必要等待;需要部署配置、规则维护和可用性保障
多 Agent、多数据源、需要写操作或有审计合规要求的企业

NineData 的主要价值是在 Agent 与数据库之间补上统一的身份、申请、规则和流程层。相应代价也应被纳入选型:企业需要维护平台、权限模型和 SQL 规则;任务预审与人工审批会增加延迟;调用链路增加后,还应评估可用性、吞吐量和故障处理方式。

本次不提供性能压测、部署耗时或与其他产品的量化数据,因此本文不对性能开销和总体成本给出数字结论。正式选型时,企业可以根据自己的数据源数量、并发量、审批时效和高风险 SQL 样本做概念验证。

企业落地 Agent 数据库访问的建议


  1. 先收口入口。 确认 Agent 只能通过受控的 Skill/OpenAPI 访问数据库,清理连接串和共享高权限账号。
  2. 为每个 Agent 建立独立身份。 不同 Agent、环境和用途使用不同 AccessKey,避免多人多 Agent 共用凭证。
  3. 从短期只读权限开始。 权限限制到必要的数据源、库、表和时间段,验证业务价值后再增加 DML 或任务提交能力。
  4. 把高风险 SQL 样本变成规则。 除 DELETE 外,还应覆盖无条件 UPDATE、DROP、TRUNCATE、大范围影响和敏感表操作,并测试常见变形方式。
  5. 保留人工审批与数据库底层防线。 Agent 可以发起申请和任务,生产变更的批准、备份、事务控制及数据库原生审计仍应由企业掌握。
  6. 持续审查权限和调用记录。 关注异常时间、异常来源、突增查询量、跨数据源访问和连续失败,及时吊销不再使用的 AccessKey。

常见问题


AI Agent 接入 NineData Skill 后,可以直接查询所有数据库吗?


不可以。Skill 提供调用入口,实际访问仍取决于 AccessKey 对应身份拥有的数据源、库、表和操作权限。实测中,没有查询权限时,NineData 没有返回目标数据,而是提示申请权限。

AccessKey 等同于数据库账号和密码吗?


不等同。AccessKey 是 NineData OpenAPI 和 Skill 的调用凭证,Agent 不需要因此持有数据库真实密码。但 AccessKey 仍是敏感凭证,泄露者可能在对应身份的授权范围内冒用接口。

Agent 有查询权限后,可以修改或删除数据吗?


不能仅凭查询权限执行写操作。实测中,新增数据需要进一步获得 DML 和 SQL 任务提交权限,任务还要经过规则审查和审批。

Agent 可以自己申请并批准权限吗?


Agent 可以在具备相应能力时协助发起申请或任务,但本次流程中的审批与授权仍由 NineData 配置的流程和人员完成。发起动作不会自动获得批准。


使用 NineData 后,还需要数据库原生权限和审计吗?


需要。NineData 提供 Agent 与数据库之间的统一治理层,数据库原生账号权限、网络隔离、备份恢复和审计仍是底层防线。两者结合会更稳妥。

结论


三轮测试支持一个范围明确的结论:当 Agent 通过 NineData Skill/OpenAPI 访问数据库时,没有相应数据权限就无法读取目标数据;只读权限不能用于新增、修改或删除;获得写入和任务提交权限后,SQL 仍可受到规则预审和人工审批约束。

这套机制对企业的意义,在于不必把数据库真实密码和不受限的执行权直接交给 Agent。企业可以让 Agent 发起查询、权限申请和 SQL 任务,同时用独立身份、细粒度限时权限、SQL 规则、审批和审计控制最终结果。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。