使用 Java EE 中的最终用户凭证通过 JPA 访问数据库



我正在做一个JavaEE项目,包括WildFlyHibernate(JPA(、C3P0和一个MS SQL Server数据库。

该数据库是一个遗留数据库,具有一千多个数据库对象,如Stored ProceduresFunctionsViewsTriggers等。所有这些数据库对象都User Role级别设置了细粒度权限。

现在我需要使用 JavaEE Web 应用程序访问此数据库。我的问题是,通常的 JPA 配置只允许我在配置文件中为数据库设置一个用户名/密码。我找不到任何方法来配置 JPA 层,以便使用最终用户的登录名访问数据库。

我最终通过调用为每个用户创建一个实体管理器工厂

EntityManagerFactory entityManagerFactory = 
Persistence.createEntityManagerFactory(properties_with_credentials_here)

每个用户一次。

这种方法的问题在于,这基本上会实例化每个用户的整个JPA层,并占用太多内存。当然,我没有使用任何类型的缓存层。内存仅用于实体元信息(很多(。

现在我最初的问题是:JavaEE(JPA(中是否有任何"标准"方法可以使用最终用户的登录名和密码访问数据库层?

我不敢相信我是第一个遇到这种情况的人。在我看来,"模拟"在.netWeb 应用程序中是很正常的。所以我想一定有办法在 Java 中做到这一点。

非常欢迎任何评论或提示或新方法。

JavaEE 中的"标准"方法是让应用程序用户访问数据库,并通过应用程序中的角色实现基于用户的访问权限。

如果需要依赖现有数据库用户,则唯一的机会是为每个用户或每个请求建立连接。然后,实体管理器确实会消耗一些内存,因为它被设计为应用程序的持久性上下文(因此是某种缓存(。

也许你可以在这里进行一些权衡,通过访问那些真正必须由普通JDBC基于用户的部分,以及可能由一些具有扩展权限的应用程序用户执行数据库过程和其他部分,以确保以编程方式进行必要的用户限制。

最新更新