如何处理我们有一个运行多个数据库角色(代表用户)的Postgres数据库并希望使用hibernate的情况,以便使用与特定用户提取的连接执行每个数据库语句?
要获得Session
/ EntityManager
,我们需要从EntityManagerFactory
获取它,这需要一个数据库用户/密码,通常在persistence.xml
中指定,如下所示:< / p>
<property name="javax.persistence.jdbc.user" value="SYSDBA"/>
<property name="javax.persistence.jdbc.password" value="masterkey"/>
当然,我可以为使用单独的Session
的每个用户创建EntityManager
/ EntityManagerFactory
,但这是一项代价高昂的操作。如何解决这个问题?
答案 0 :(得分:2)
如果RDBMS是PostgreSQL,我认为实现这一目标的最佳方法是调用SET ROLE
命令。此命令将角色和权限更改为指定的任何角色。它将在会话期间执行所有SQL命令,就像您在开始时使用该角色登录一样。
https://msdn.microsoft.com/en-us/library/ee292027(v=vs.118).aspx