小编pyf*_*yfi的帖子

记录设置为 SECURITY DEFINER 的 Postgres 函数的调用者

有没有办法让 Postgres 中的函数(使用 9.4)找出调用它的用户,如果该函数设置为 SECURITY DEFINER

我遇到的设计问题是我想通过我的 Web 应用程序进行用户身份验证(以便我可以共享连接池),但仍然在数据库中维护引用来自 Web 应用程序的经过身份验证的最终用户的审计记录。

目前的流程是:

  • 用户连接到一个 Web 应用程序,它会进行身份验证以验证他们是谁。
  • 然后 Web 应用程序通过应用程序用户连接到 Postgres。
  • 当代表用户执行任何查询时,Web 应用程序运行SET ROLE [username],然后是相关查询,然后是RESET ROLE将连接返回到连接池。
  • 所有用户查询都是通过函数完成的。用户有运行函数的权限,但没有直接对表进行更改的权限(Web 应用程序帐户除了模拟某些用户的权限外,没有其他权限)。这些函数还通过使用CURRENT_USER和插入/更新适当的值来维护“创建者”、“上次更新”等概念的列CURRENT_TIMESTAMP

我遇到的问题是CURRENT_USER始终返回函数所有者,并SESSION_USER始终返回 Web 应用程序帐户,而我真正想要的是调用该函数的帐户的名称。

这可能吗?我在文档中没有看到任何特别有希望的东西。相反,其他人是如何解决这个设计问题的?

postgresql

6
推荐指数
2
解决办法
857
查看次数

标签 统计

postgresql ×1