多租户堡垒:PostgreSQL 中的银行级数据隔离

发布日期:2026-06-13 10:00:25   浏览量 :4
发布日期:2026-06-13 10:00:25  
4

在多租户 B2B 平台中,数据泄露是毁灭级的事件。如果物业 A 登录到您的仪表板并意外看到了物业 B 的住客数据或收入指标,您平台的信任度将永久受损。

大多数开发者在应用层处理数据隔离。他们依赖 Node.js 中间件或对象关系映射(ORM)在每个数据库查询后附加 WHERE property_id = X

这是一个巨大的安全风险。只要一名初级开发者在新的接口端点中忘记添加 WHERE 子句,就会导致跨租户数据暴露。

要构建真正安全的企业级架构,必须将安全性下沉到数据库层。以下是如何使用 PostgreSQL 行级安全(RLS)构建多租户堡垒的方法。

概念:数据库强制隔离

行级安全(RLS)是 PostgreSQL 的一项功能,充当表级别的安保人员。

启用 RLS 后,数据库在返回任何行之前都会评估特定策略。即使被攻破的应用程序接口(API)发送了恶意的 SELECT * FROM guests 查询,数据库本身也会拦截该请求,仅返回当前用户明确允许查看的行。

应用层将无法访问其不应接触的数据。

第一步:模式与锚定键

首先,数据库中每个包含租户特定数据的表都需要一个锚定键。在 B2B 平台中,这通常是 tenant_id(租户 ID)或 property_id(物业 ID)。

-- 创建我们的基础物业表
CREATE TABLE properties (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL
);

-- 创建一个锚定到特定物业的住客表
CREATE TABLE guests (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  property_id UUID REFERENCES properties(id) NOT NULL,
  full_name TEXT NOT NULL,
  email TEXT NOT NULL
);

接下来,我们在 guests 表上启用 RLS。一旦运行此命令,表将默认为“拒绝所有”。如果您现在查询它,即使对于数据库管理员,它也将返回零行。

ALTER TABLE guests ENABLE ROW LEVEL SECURITY;

第二步:传递执行上下文

为了让数据库

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据