---
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', ...)。 - 性能:为策略条件字段建立索引;避免全表扫描与谓词复杂度过高。
示例
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下读写测试;越权尝试应被拒绝。 - 观察查询计划与索引命中;策略变更后的性能回归。
- 审计与错误日志:记录拒绝与策略命中情况。
注意事项
- 默认拒绝原则;仅允许明确策略。
- 谨慎使用复杂表达式;控制策略可维护性。
- 应用会话管理需可靠注入与清理上下文。

发表评论 取消回复