postgresql 在事务中重新创建RLS策略是否会暴露数据?

0md85ypi  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(99)

假设我在一个表上有一个RLS策略,我意识到我弄错了,忘记了策略中的一个命令,所以不能ALTER它;它必须是DROP/CREATE版本。我在k8中使用滚动更新,并且我的DB迁移发生在init容器中。我部署了新的应用程序版本,其中DROP是策略,CREATE是具有正确命令集的新应用程序。在CREATEDROP之间是否存在一个窗口(无论多么短暂),仍然在运行的旧pod现在可以访问所有内容吗?直觉告诉我们“肯定”,但测试秒争用条件的一小部分是很困难的。我可以通过将DROP/CREATE Package 在事务中来防止此窗口吗?是否有其他方法可以使此操作安全?
真实的世界中,正确的答案是“你部署的版本有一个安全漏洞。缩放到0并部署正确的版本”,但我试图通过这种设置带来的漏洞来思考,将来做部署的其他人可能不会那么小心。
我目前的安装是运行9.6,但有一个中期计划,工作到15.1,所以任何一个版本的答案是受欢迎的。

yv5phkfx

yv5phkfx1#

行级别的安全策略允许角色做一些事情,所以删除策略将 * 减少 * 用户可以做的事情。如果你担心这会导致并发查询的错误或坏结果,那么将DROP POLICY和CREATE POLICY`语句 Package 在单个事务中,然后所有并发查询都会被阻塞。这应该不是问题,因为这两个语句都很快。

相关问题