Data Access Control
Data Access Control 是控制 Agent 可以访问哪些数据的机制。用户 A 的数据不应该被用户 B 的 Agent 访问。
#type / concept
#status / evergreen
#tech / ai
#tech / security
[!info] related notes
- 所属 MOC: AI Agent Application MOC, Security MOC
- 相关: Tenant Isolation, Auth & RBAC
Data Access Control
一句话定义
Data Access Control 是控制 Agent 可以访问哪些数据的机制。RAG 检索时,应该只检索用户有权访问的文档,而不是所有文档。
核心原理
访问控制维度
| 维度 | 说明 | 实现 |
|---|---|---|
| 用户级 | 只能访问自己的数据 | WHERE user_id = ? |
| 租户级 | 只能访问本租户的数据 | WHERE tenant_id = ? |
| 角色级 | 根据角色访问不同数据 | RBAC 权限 |
| 文档级 | 文档有访问控制列表 | ACL |
RAG 检索时的访问控制
async def search_with_access_control(
query_embedding,
user_id: str,
tenant_id: str,
top_k: int = 10,
):
return await db.query("""
SELECT *, embedding <=> ? AS distance
FROM documents
WHERE tenant_id = ? AND (owner_id = ? OR is_public = true)
ORDER BY distance
LIMIT ?
""", query_embedding, tenant_id, user_id, top_k)
常见坑
- 不做数据隔离: 用户 A 能看到用户 B 的数据
- RAG 检索不过滤: 检索了所有文档,包括无权访问的
- 工具调用不做权限检查: Agent 调用了不该调用的工具