--- title: PostgreSQL 行级安全 RLS 深入(策略、current_setting 与性能) keywords: - RLS - 策略 - current_setting - 性能 - 索引 description: 深入解析 PostgreSQL RLS 的策略编写与上下文注入(current_setting),评估性能与索引协同,并提供验证方法。 date: 2025-11-26 tags: - RLS - current_setting - 安全 - 性能 - 授权 - 数据库 - 策略 - 索引 categories: - 文章资讯 - 技术教程 --- # PostgreSQL 行级安全 RLS 深入(策略、current_setting 与性能) ## 关键实践与参数 - 启用 RLS:`ALTER TABLE t ENABLE ROW LEVEL SECURITY;` - 策略:`USING` 读策略与 `WITH CHECK` 写入策略;上下文注入 `set_config('app.tenant_id', ...)`。 - 性能:为策略条件字段建立索引;避免全表扫描与谓词复杂度过高。 ## 示例 ```sql ALTER TABLE orders ENABLE ROW LEVEL SECURITY; CREATE POLICY tenant_read ON orders USING (tenant_id = current_setting('app.tenant_id')::uuid); CREATE POLICY tenant_write ON orders WITH CHECK (tenant_id = current_setting('app.tenant_id')::uuid); ``` ## 验证方法 - 会话设置不同 `tenant_id` 下读写测试;越权尝试应被拒绝。 - 观察查询计划与索引命中;策略变更后的性能回归。 - 审计与错误日志:记录拒绝与策略命中情况。 ## 注意事项 - 默认拒绝原则;仅允许明确策略。 - 谨慎使用复杂表达式;控制策略可维护性。 - 应用会话管理需可靠注入与清理上下文。

发表评论 取消回复