RLS策略定义在运行时是否受Search_Path的影响? [英] Are RLS policy definitions affected at runtime by the search_path?

查看:14
本文介绍了RLS策略定义在运行时是否受Search_Path的影响?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在回答this question时,我就

提出了一些(没有根据的)建议
create policy test_policy on policy for all to public using (
        user_id = session_user_id());

顺便说一句,您应该对session_user_id()调用进行模式限定以使您的策略实际上是安全的,这样用户就不能通过search_path注入他们自己的session_user_id函数。

但事实真的如此吗?我记错了the search_path issue with SECURITY DEFINER functions

如何以及何时解析行级安全策略?引用是在定义期间还是在评估期间解析的?

让它们中的标识符早绑定而不是晚绑定是有意义的,但我在文档中找不到任何有关这方面的内容。

推荐答案

策略定义存储在pg_policy中,其中USING子句存储在polqual列中,WITH CHECK表达式存储在polwithcheck中。

这两列都是pg_node_tree数据类型,这是一个经过解析的SQL语句。因此,策略是在创建时解析的,而不是在执行时解析的,这很像视图或符合标准的SQL函数(v14中的新功能)。这意味着search_path的设置仅在创建策略时相关,而不是在策略执行时相关。

这篇关于RLS策略定义在运行时是否受Search_Path的影响?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆