search_path 是否会在运行时影响 RLS 策略定义?

Are RLS policy definitions affected at runtime by the search_path?

在回答 时,我对

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

Btw, you should schema-qualify the session_user_id() call to make your policy actually secure, so that the user cannot inject their own session_user_id function through the search_path.

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

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

将其中的标识符设置为早期绑定而不是后期绑定是有意义的,但我在文档中找不到任何关于此的内容。

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

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