文档 / 安全

安全的数据库访问

由你逐个连接决定智能体能在数据库中做什么。未经你批准,任何写入都不会发生。

数据库客户端中的每个连接都有针对智能体的独立访问策略。IDE 会在每条语句上执行该策略;智能体无法更改它。

三个级别

在连接对话框的 智能体访问 部分中配置。

级别 智能体能看到什么、能做什么
无访问 智能体看不到此连接。
仅查询(默认) 只能执行 SELECT,且有行数限制。
超级权限 执行你选定的更改,且始终需要你批准。

超级权限

启用超级权限时,你可以勾选允许哪些类别的语句:

复选框 语句
修改数据 INSERT、UPDATE、DELETE、MERGE
修改结构 CREATE、ALTER、DROP、TRUNCATE
执行代码 PL/SQL 块和存储过程

未勾选类别的语句会被拒绝:“此连接的超级权限不包括这类语句。”

每条语句都会展示给你批准,并且绝不会在无人值守模式下执行。如果连接被标记为只读,则以只读为准,高于智能体的任何权限。

写入如何获得批准

  1. 智能体通过 yuli_db_execute 工具提出语句。
  2. Yuli 检查该连接是否拥有针对该类语句的超级权限。
  3. 出现 在数据库“名称”上执行 卡片,显示完整语句。
  4. 由你批准或拒绝。未经你批准,什么都不会执行。

订阅模式同样如此:如果 Claude Code、Kiro、Codex 或 Antigravity 调用 yuli_db_execute,卡片会出现在 Yuli 中。

智能体查询的限制

限制 值
每次查询的最长时间 45 秒
每次查询的行数 默认 100 行,最多 1000 行(每次查询最大行数)
开销较大的执行计划 如果查询的执行计划预计在排序、聚合、join 或 DISTINCT 下扫描超过 200 万行,该查询会被拒绝。

Yuli 会根据数据库引擎,用 ROWNUM、TOP 或 LIMIT 包装每个查询,确保行数限制始终生效。

你自己使用的 SQL 控制台有其独立的限制:默认 500 行,最多 100,000 行。

不能通过终端走捷径

智能体不能使用命令行数据库客户端(sqlplus、sqlcl、sqlcmd、bcp、sqlite3、psql、mysql、mariadb、mongo、mongosh、isql、db2、impdp、expdp、rman 等)。这样,任何人都无法绕过访问策略。

密码

每个连接的密码都保存在系统密钥链中,绝不存入项目。智能体的访问策略保存在你的用户配置中,位于项目之外,因此仓库无法给自己授予权限。

最佳实践

  • 对共享环境的连接保持 仅查询。
  • 仅在你的本地或开发数据库上使用 超级权限,并且只勾选你需要的语句类别。
  • 将生产环境的连接标记为只读。
  • 如果只是解释或调试 PL/SQL 代码,智能体无需写入:读取模式和源代码就足够了。