Data Access Control

Data Access Control 是控制 Agent 可以访问哪些数据的机制。用户 A 的数据不应该被用户 B 的 Agent 访问。

#type / concept #status / evergreen #tech / ai #tech / security

[!info] related notes

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)

常见坑

  1. 不做数据隔离: 用户 A 能看到用户 B 的数据
  2. RAG 检索不过滤: 检索了所有文档,包括无权访问的
  3. 工具调用不做权限检查: Agent 调用了不该调用的工具

参考资料

创建于 2026/6/30 更新于 2026/7/15