带有 Oracle 12.2 和 Oracle Label Security 的 Springboot 2.7 在每个 http 请求上将单个数据库用户帐户凭据传递给 Connection

问题描述 投票:0回答:2

我有基于 Web 的 Springboot 2.7 应用程序和 Oracle 12.2 数据库。截至目前,它使用 AutoConfigure 选项,并使用架构所有者用户/密码通过 Tomcat JNDI 设置数据源。我的要求是我必须使用Oracle数据库的通过用户代理机制进行连接。在使用 OCI 的严格 JDBC 中,它可能看起来像这样

属性 p = new Properties(); p.put(OracleOCIConnectionPool.PROXY_USER_NAME,用户名); 连接池.getProxyConnection(OracleOCIConnectionPool.PROXY_TYPE_USER_NAME,p)

从数据库来看,假设“scott”是代理用户并且“user”通过 scott 连接。

连接用户[scott]/tiger

我不一定需要使用 OCI,并且我相信 Oracle 瘦驱动程序对作为代理用户进行身份验证具有相同的支持。

代理用户连接的要求同样是 Oracle Label Security。每个 Oracle 数据库用户帐户都有一个 OLS 配置文件,该配置文件决定他们可以在数据库中看到什么,从而决定他们可以在 Web 应用程序中看到什么。

我的问题是,我没有看到在 Springboot 中实现此目的的方法。就目前情况而言,数据源已正确构建并可与 tomcat 中的 JNDI 信息配合使用。我只需要根据每个请求发送额外的连接信息。

评论: https://www.tabnine.com/code/java/classes/org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl

但是来自 ConnectionProvider 的 getConnection API 调用似乎不允许额外的输入,例如用户名等

评论: https://docs.spring.io/spring-data/jdbc/old-docs/1.2.1.RELEASE/reference//html

这个 Spring Security 指南在第 8 章“自定义数据源配置..”的第 8 章中有一些关于代理身份验证的信息,但这显然已经过时了,除非我错过了,否则 2.7.2 的安全指南第 9 章没有这个。这让我相信它被删除是有原因的,除非它在那里并且我错过了它。

评论: 关于多个数据源和以编程方式配置数据源的大量帖子,我不明白这如何符合我的要求。就目前情况而言,数据源已正确构建并可与 tomcat 中的 JNDI 信息配合使用。我只需要根据每个请求发送额外的连接信息。

proxy request connection
2个回答
0
投票

您可以通过编程方式传递连接属性,如本DataSourceSample.java所示。您还可以查看 OracleConnection.html 以获取可以使用的连接属性列表。


0
投票

你有没有弄清楚这一点? 正在尝试this - 但还没有成功。

© www.soinside.com 2019 - 2024. All rights reserved.