知识卡片
行级安全RLS:把数据隔离规则下沉到数据库强制层,而非依赖应用自觉
内容
行级安全(Row-Level Security,RLS)是数据库内置的一种数据隔离机制,功能上类似Oracle的VPD(虚拟私有数据库),核心思路是把”哪些用户能看到哪些行数据”这条隔离规则下沉到数据库层强制执行,而不是依赖每个应用自己在查询语句里手动拼接”WHERE user_id = 当前用户”这类过滤条件。启用RLS后,同一张表在不同用户身份下查询会自动只返回该用户被授权可见的行——只有超级用户角色能看到全部数据,普通用户即使拿到原始SQL执行权限,也无法绕过这层隔离看到其他用户的数据。这类”在数据层强制隔离而非依赖应用层自觉遵守”的设计思路,在支付卡行业数据安全标准(PCI DSS)等对多租户数据隔离有强制合规要求的场景下尤其重要,因为它把隔离正确性的保证从”每个开发者都要记得写对过滤条件”转移到数据库这一个统一的强制点上,大幅降低了因某处应用代码疏漏导致越权数据泄露的风险。
参考来源
- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.10 从Postgres95到PostgreSQL9.5:新版亮眼特性"节,"6.10.3 PostgresSQL9.5的亮眼特性"(源文件:_epub-src/OEBPS/Text/Chapter6_10_4.xhtml)
- 结论依据:原文说明"如果你是Oracle的粉丝,肯定对VPD不陌生。这一功能在'PCI DSS——支付卡行业(PCI)数据安全标准'中一个是十分重要的实现手段,可以确保任何用户都不会读取到其他用户的信息……转换为postgres超级用户身份后,我们可以看到所有数据,但当前我使用emp1和emp2用户身份操作时,只能得到当前用户写入的数据",直接支撑本卡片结论。
- 原始内容:这一功能在"PCI DSS——支付卡行业(PCI)数据安全标准"中一个是十分重要的实现手段,可以确保任何用户都不会读取到其他用户的信息,所有用户实现最核心的隔离……转换为postgres超级用户身份后,我们可以看到所有数据,但当前我使用emp1和emp2用户身份操作时,只能得到当前用户写入的数据。