## 概述 RLS在表级为每行定义访问策略,结合应用会话中的租户上下文实现数据隔离,对读写分别设定策略以确保安全与一致。 ## 关键实践与参数 - 启用RLS: `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` - 上下文绑定: `current_setting('app.tenant_id')` - 读写策略: 分别使用 `USING` 与 `WITH CHECK` - 默认拒绝: 未设置上下文时拒绝访问 ## 示例/配置/实现 ```sql 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 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部