RLS策略定义在运行时是否受Search_Path的影响? [英] Are RLS policy definitions affected at runtime by the search_path?
本文介绍了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屋!
查看全文