文档 / 安全
安全的数据库访问
由你逐个连接决定智能体能在数据库中做什么。未经你批准,任何写入都不会发生。
数据库客户端中的每个连接都有针对智能体的独立访问策略。IDE 会在每条语句上执行该策略;智能体无法更改它。
三个级别
在连接对话框的 智能体访问 部分中配置。
| 级别 | 智能体能看到什么、能做什么 |
|---|---|
| 无访问 | 智能体看不到此连接。 |
| 仅查询(默认) | 只能执行 SELECT,且有行数限制。 |
| 超级权限 | 执行你选定的更改,且始终需要你批准。 |
超级权限
启用超级权限时,你可以勾选允许哪些类别的语句:
| 复选框 | 语句 |
|---|---|
| 修改数据 | INSERT、UPDATE、DELETE、MERGE |
| 修改结构 | CREATE、ALTER、DROP、TRUNCATE |
| 执行代码 | PL/SQL 块和存储过程 |
未勾选类别的语句会被拒绝:“此连接的超级权限不包括这类语句。”
每条语句都会展示给你批准,并且绝不会在无人值守模式下执行。如果连接被标记为只读,则以只读为准,高于智能体的任何权限。
写入如何获得批准
- 智能体通过
yuli_db_execute工具提出语句。 - Yuli 检查该连接是否拥有针对该类语句的超级权限。
- 出现 在数据库“名称”上执行 卡片,显示完整语句。
- 由你批准或拒绝。未经你批准,什么都不会执行。
订阅模式同样如此:如果 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 代码,智能体无需写入:读取模式和源代码就足够了。