PostgreSQL 授予 select 函数权限,但没有 SELECT 访问 table 的权限

PostgreSQL grant select righs on function with no SELECT access to table

我知道如何仅向用户授予 SELECT 对所选 table 或视图甚至列的访问权限。另一方面,我不希望他们能够 SELECT column1, column2 FROM ..... 创建视图不是一个选项,因为 SELECT column1, column2 FROM view 会做完全一样的东西。另一方面,我创建了一个 pgpsql 函数,它需要两个 ID 并查询相同的 table 但只从数据库 table 中检索最多两行(对于 id=ID1 和 id=ID2)。有没有办法限制用户只能使用此功能查询 table,而不给他对 table 的完整 SELECT 权限?

最简单的解决方案是仅将 table 的权限授予 OWNER;这是 PostgreSQL 中的默认行为。

然后您可以使用 SECURITY DEFINER 创建一个函数,这意味着该函数是以创建该函数的人的权限执行的。如果那是与 table 的所有者相同的用户,那么该部分就完成了。

现在剩下的就是 GRANT EXECUTE 需要访问数据的人的功能。