---

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')
  • 读写策略: 分别使用 USINGWITH 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;

验证

  • 读隔离: 不同租户上下文下只能读到各自数据
  • 写校验: 插入与更新的租户字段需匹配上下文
  • 默认拒绝: 未设置上下文查询返回空或报错
  • 审计: 记录策略命中与拒绝事件

注意事项

  • 上下文变量需安全设置与清理
  • 与连接池配合确保会话变量传递
  • 政策需覆盖所有操作类型
  • 定期审查策略与索引以保持性能

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部