2.2 KiB
2.2 KiB
角色与权限策略(权威口径)
本文档为
docs/sql/权威 SQL 入库与评审的安全口径说明。任何涉及 RLS / RPC / GRANT 的变更,必须对照本文档与docs/project_spec/AGENT_PROJECT_SPEC.md。
1. 权威身份字段
- 后台/分析端角色字段唯一权威:
public.ak_users.role - 推荐值:
admin/analytics/user(以及业务需要的扩展值)
2. 权限访问基本原则
2.1 最小权限原则
- 默认不对
anon/authenticated开放管理侧敏感表的直接访问。 - 管理侧的“全局读写”必须通过 RPC(函数)进行封装。
2.2 RLS 先行
- 所有业务表必须开启 RLS(除非明确说明原因)。
- 对消费者端可公开读取的数据(如提货点),允许创建只读 SELECT policy,并限制条件(例如
status = 1)。
3. RPC 安全口径(强制)
3.1 SECURITY DEFINER
所有管理端 RPC 必须:
SECURITY DEFINERSET search_path = public- 入口鉴权:必须校验当前用户为后台管理员
推荐的入口鉴权形式:
- 通过
public.ak_users校验:WHERE auth_id = auth.uid() AND role = 'admin'
注:如未来引入统一函数
get_current_user_role(),则可改为get_current_user_role() IN ('admin','analytics')。
3.2 返回字段最小化
- 仅返回前端所需字段。
- 禁止返回敏感字段(如密钥、token、完整手机号/身份证号等),除非有明确业务需求与脱敏方案。
3.3 分页与限制
- 列表类 RPC 必须支持分页(
LIMIT/OFFSET)或带LIMIT。
4. GRANT/REVOKE 口径
- 默认:
REVOKE ALL ... FROM PUBLIC。 - 仅对需要调用 RPC 的角色授予
EXECUTE(通常为authenticated)。 - 禁止对
anon/authenticated大范围GRANT直接表权限。
5. 入库评审要点(与 AGENT_PROJECT_SPEC.md 对齐)
评审必须覆盖:
- 是否开启 RLS;policy 是否过宽。
- 是否存在不安全的
SECURITY DEFINER(无鉴权/未固定 search_path)。 - 是否有破坏性语句(DROP/TRUNCATE/无 WHERE 的 UPDATE/DELETE)。
6. 关联文档
docs/project_spec/AGENT_PROJECT_SPEC.mddocs/sql/00_meta/README.md