🔐 第 13 章 · 权限与安全 · 交互式演示

权限矩阵编辑器 · RLS 多租户实时演示 · pg_hba 规则匹配模拟
权限矩阵
行级安全 RLS
pg_hba 匹配

① 权限矩阵编辑器(角色 × 表 × 动作)

点击单元格切换 GRANT / REVOKE。下方会同步生成 SQL,并预览每个角色对每张表的「能/不能」。 这套机制对应文档 13.2 节的 GRANT 体系。
角色: 对象:
已授权 未授权 点击单元格切换

📜 自动生成的 GRANT/REVOKE SQL

🧪 模拟权限检查

能否对 执行
点击「检查」查看结果

② 行级安全 RLS · 多租户实时演示

下方是真实的 tickets 表(共 9 行,分属租户 1/2/3)。 切换「当前会话身份」相当于执行 SET LOCAL app.tenant_id = N, RLS 引擎会自动用 USING 子句过滤行。
当前会话身份(app.tenant_id):

📦 表中的真实数据(数据库视角)

👀 RLS 过滤后你能看到的(应用视角)

✏️ 写入测试 · WITH CHECK 拦截演示

尝试以当前身份插入一条工单,tenant_id 由你指定。如果与会话不一致, RLS 的 WITH CHECK 子句会拦截。
插入到 tenant_id = title =
等待操作...

📜 当前 RLS 策略

-- 启用并强制 RLS(连 owner 也受约束)
ALTER TABLE tickets ENABLE ROW LEVEL SECURITY;
ALTER TABLE tickets FORCE  ROW LEVEL SECURITY;

-- PERMISSIVE(默认):每个动作各一条
CREATE POLICY tenant_iso_select ON tickets FOR SELECT
    USING (tenant_id = current_setting('app.tenant_id')::int);

CREATE POLICY tenant_iso_insert ON tickets FOR INSERT
    WITH CHECK (tenant_id = current_setting('app.tenant_id')::int);

CREATE POLICY tenant_iso_update ON tickets FOR UPDATE
    USING      (tenant_id = current_setting('app.tenant_id')::int)
    WITH CHECK (tenant_id = current_setting('app.tenant_id')::int);

-- RESTRICTIVE(黑名单):屏蔽 archived 状态
CREATE POLICY no_archived ON tickets AS RESTRICTIVE FOR SELECT
    USING (status <> 'archived');

③ pg_hba.conf 规则匹配模拟器

在左边按真实顺序写规则,右边输入「连接请求」模拟 PG 自上而下匹配。 第一条匹配的就是结果。

📝 pg_hba.conf 规则(每行 5 列)

🔌 模拟连接请求

类型
用户
来源 IP 属于组
点击「匹配」查看哪条规则命中

🛡️ METHOD 安全等级

METHOD安全原理生产建议
trust⚠️ 极低不验密码仅 docker / CI
md5MD5 哈希不推荐
scram-sha-256SCRAM 挑战-应答★ 默认推荐
cert双向 TLS机器对机器
peerOS 用户名映射仅本地 socket
ldap转发到 LDAP统一登录
reject立即拒绝显式拉黑