假设我在一个表上有一个RLS策略,我意识到我弄错了,忘记了策略中的一个命令,所以不能ALTER
它;它必须是DROP
/CREATE
版本。我在k8中使用滚动更新,并且我的DB迁移发生在init容器中。我部署了新的应用程序版本,其中DROP
是策略,CREATE
是具有正确命令集的新应用程序。在CREATE
和DROP
之间是否存在一个窗口(无论多么短暂),仍然在运行的旧pod现在可以访问所有内容吗?直觉告诉我们“肯定”,但测试秒争用条件的一小部分是很困难的。我可以通过将DROP
/CREATE
Package 在事务中来防止此窗口吗?是否有其他方法可以使此操作安全?
真实的世界中,正确的答案是“你部署的版本有一个安全漏洞。缩放到0并部署正确的版本”,但我试图通过这种设置带来的漏洞来思考,将来做部署的其他人可能不会那么小心。
我目前的安装是运行9.6,但有一个中期计划,工作到15.1,所以任何一个版本的答案是受欢迎的。
1条答案
按热度按时间yv5phkfx1#
行级别的安全策略允许角色做一些事情,所以删除策略将 * 减少 * 用户可以做的事情。如果你担心这会导致并发查询的错误或坏结果,那么将
DROP POLICY
和CREATE POLICY`语句 Package 在单个事务中,然后所有并发查询都会被阻塞。这应该不是问题,因为这两个语句都很快。