Trong RAG doanh nghiệp, rủi ro lớn nhất là rò rỉ chéo: câu trả lời cho user A dẫn nội dung từ tài liệu chỉ user B được xem. LLM không tự thực thi phân quyền — phải chặn ở tầng retrieval, trước khi nội dung vào context.
Nguyên tắc cốt lõi: enforce authorization TRƯỚC khi retrieve, không lọc sau khi sinh.
Các lớp phòng thủ:
1. Gắn quyền lúc ingestion — mỗi chunk lưu metadata ai được xem: tenant_id, owner, roles, acl. Quyền phải chụp tại thời điểm nạp và cập nhật khi nguồn đổi.
2. Filter theo danh tính khi truy vấn — similarity search luôn kèm filter theo tenant/role/ACL của user hiện tại, để index chỉ trả về chunk hợp lệ ngay từ đầu; đây là kiểm soát an ninh bắt buộc, không phải tùy chọn tối ưu (chi tiết cơ chế filter của vector DB là chủ đề riêng).
3. Cách ly cứng giữa tenant — với SaaS nhiều tenant, metadata filter ứng dụng tự gắn chưa đủ tin cậy (một bug bỏ sót filter = rò rỉ); nâng lên tầng hạ tầng tự chặn: collection/namespace riêng mỗi tenant, hoặc Row-Level Security (vd pgvector + Postgres RLS) để chính DB từ chối truy vấn xuyên tenant kể cả khi app quên filter.
4. Kiểm tra lại trước khi đưa vào LLM — với dữ liệu rất nhạy cảm, re-verify quyền và strip PII vượt quyền trước khi ghép prompt.
5. Truyền danh tính từ đầu đến cuối — quyền dựa trên user thật (JWT/session), không tin tham số client; audit log mọi truy vấn.
Bẫy hay gặp: chỉ dựa vào prompt ("đừng tiết lộ tài liệu người khác") — vô dụng trước injection và không phải kiểm soát an ninh. Phân quyền phải nằm ở data layer.