我有基于 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 信息配合使用。我只需要根据每个请求发送额外的连接信息。
但是来自 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 信息配合使用。我只需要根据每个请求发送额外的连接信息。
您可以通过编程方式传递连接属性,如本DataSourceSample.java所示。您还可以查看 OracleConnection.html 以获取可以使用的连接属性列表。
你有没有弄清楚这一点? 正在尝试this - 但还没有成功。