postgresql 如何在不提供对联接表的不受限制的RLS访问的情况下,使用带有“in”和“select”的supporting RLS

qyzbxkaa  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(110)

我正在尝试在我的供应表上设置简单的RLS。我在 all 表上启用了RLS,然后将此策略添加到我想要从中选择的表中:

(project_id IN ( SELECT projects.id FROM projects))

但是,它总是失败,因为表项目也打开了RLS。
实际上,策略将更加复杂,并涉及多个表。
如何使用RLS而不必公开制定RLS策略所需的所有表?

qlckcl4x

qlckcl4x1#

好吧,算出来了,事实证明这是相对简单的,但我会张贴一个答案,为人们遇到同样的问题,没有指导。
解决方案是使用security definer functions,它可以查询受RLS保护的表,而不会产生RLS惩罚:
https://supabase.com/docs/guides/database/postgres/row-level-security#use-security-definer-functions
https://supabase.com/docs/guides/auth/row-level-security#using-security-definer-functions
您可以创建一个新的模式private,并使用SQL编辑器或GUI添加所需的函数。该函数可以接受参数,如postgres文档所示,该文档还解释了一些其他选项:
https://www.postgresql.org/docs/current/sql-createfunction.html

相关问题