---
title: PostgreSQL 行级安全(RLS)与多租户治理(策略、绑定与验证)
date: 2025-11-26
keywords:
- RLS
- 多租户
- POLICY
- current_setting
- 安全
description: 启用行级安全并基于租户上下文绑定访问策略,实现多租户数据隔离,提供策略与验证方法确保查询与写入安全。
tags:
- POLICY
- PostgreSQL
- RLS
- current_setting
- 多租户
- 安全
- 数据与存储
- 数据库
categories:
- 文章资讯
- 技术教程
---
概述
RLS在表级为每行定义访问策略,结合应用会话中的租户上下文实现数据隔离,对读写分别设定策略以确保安全与一致。
关键实践与参数
- 启用RLS:
ALTER TABLE ... ENABLE ROW LEVEL SECURITY - 上下文绑定:
current_setting('app.tenant_id') - 读写策略: 分别使用
USING与WITH CHECK - 默认拒绝: 未设置上下文时拒绝访问
示例/配置/实现
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
tenant_id TEXT NOT NULL,
amount NUMERIC(12,2) NOT NULL
);
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
ALTER TABLE orders FORCE ROW LEVEL SECURITY;
CREATE POLICY p_select ON orders FOR SELECT USING (tenant_id = current_setting('app.tenant_id'));
CREATE POLICY p_insert ON orders FOR INSERT WITH CHECK (tenant_id = current_setting('app.tenant_id'));
SELECT set_config('app.tenant_id', 't1', false);
INSERT INTO orders(tenant_id, amount) VALUES ('t1', 12.3);
SELECT * FROM orders;
验证
- 读隔离: 不同租户上下文下只能读到各自数据
- 写校验: 插入与更新的租户字段需匹配上下文
- 默认拒绝: 未设置上下文查询返回空或报错
- 审计: 记录策略命中与拒绝事件
注意事项
- 上下文变量需安全设置与清理
- 与连接池配合确保会话变量传递
- 政策需覆盖所有操作类型
- 定期审查策略与索引以保持性能

发表评论 取消回复