如何使用 Spring-JPA 将 Oracle JDBC 设置为使用外部身份验证?
How do I set Oracle JDBC to use external authentication using Spring-JPA?
我目前有一个简单的节点应用程序,它与 Oracle 数据库通信并使用 Kerberos 进行身份验证。工作代码如下所示...
oracledb.externalAuth = true;
oracledb.autoCommit = true;
...
get poolConnection(){
return oracledb.createPool({
connectString: this.connectionString
});
}
注意我不需要用户名和密码。我尝试使用 Spring-JPA 在 Scala 中做同样的事情。我的配置看起来像这样...
spring:
datasource:
url: jdbc:oracle:thin:@//myjdbcurl
validationQuery: SELECT 1
jpa:
show-sql: true
properties:
hibernate:
dialect=org:
hibernate:
dialect:
Oracle10gDialect: org.hibernate.dialect.Oracle10gDialect
还有像这样的 POM...
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
然而,当我尝试 运行 我得到...
ORA-28040: No matching authentication protocol
如何使用 Oracle 和 Spring-JPA 处理 Kerberos Auth?
所以在我的例子中,为了让它工作,我的 application.yml 看起来像这样......
spring:
datasource:
url: jdbc:oracle:thin:@//...
validationQuery: select 1 from dual
jpa:
show-sql: true
properties:
hibernate:
naming:
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
dialect: org.hibernate.dialect.Oracle10gDialect
jdbc:
url: jdbc:oracle:thin:@//...
driver:
class:
name: oracle.jdbc.OracleDrive
我不得不将其添加到设置 Spring 应用程序的静态主程序中...
def main(args: Array[String]) : Unit = {
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_SERVICES, "KERBEROS5")
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_MUTUAL, "true")
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_CC_NAME, System.getenv("KRB5CCNAME"))
System.setProperty("java.security.krb5.conf", System.getenv("KRB5_CONFIG"))
SpringApplication.run(classOf[Application], args :_ *)
}
我在查看代码后尝试将其添加到属性中,但只有上面的方法有效。
#java:
# security:
# krb5:
# conf: ${KRB5_CONFIG}
#oracle:
# net:
# authentication_services: "KERBEROS5"
# kerberos5_mutual_authentication: "true"
# kerberos5_cc_name: ${KRB5_CONFIG}
我目前有一个简单的节点应用程序,它与 Oracle 数据库通信并使用 Kerberos 进行身份验证。工作代码如下所示...
oracledb.externalAuth = true;
oracledb.autoCommit = true;
...
get poolConnection(){
return oracledb.createPool({
connectString: this.connectionString
});
}
注意我不需要用户名和密码。我尝试使用 Spring-JPA 在 Scala 中做同样的事情。我的配置看起来像这样...
spring:
datasource:
url: jdbc:oracle:thin:@//myjdbcurl
validationQuery: SELECT 1
jpa:
show-sql: true
properties:
hibernate:
dialect=org:
hibernate:
dialect:
Oracle10gDialect: org.hibernate.dialect.Oracle10gDialect
还有像这样的 POM...
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
然而,当我尝试 运行 我得到...
ORA-28040: No matching authentication protocol
如何使用 Oracle 和 Spring-JPA 处理 Kerberos Auth?
所以在我的例子中,为了让它工作,我的 application.yml 看起来像这样......
spring:
datasource:
url: jdbc:oracle:thin:@//...
validationQuery: select 1 from dual
jpa:
show-sql: true
properties:
hibernate:
naming:
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
dialect: org.hibernate.dialect.Oracle10gDialect
jdbc:
url: jdbc:oracle:thin:@//...
driver:
class:
name: oracle.jdbc.OracleDrive
我不得不将其添加到设置 Spring 应用程序的静态主程序中...
def main(args: Array[String]) : Unit = {
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_SERVICES, "KERBEROS5")
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_MUTUAL, "true")
System.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_CC_NAME, System.getenv("KRB5CCNAME"))
System.setProperty("java.security.krb5.conf", System.getenv("KRB5_CONFIG"))
SpringApplication.run(classOf[Application], args :_ *)
}
我在查看代码后尝试将其添加到属性中,但只有上面的方法有效。
#java:
# security:
# krb5:
# conf: ${KRB5_CONFIG}
#oracle:
# net:
# authentication_services: "KERBEROS5"
# kerberos5_mutual_authentication: "true"
# kerberos5_cc_name: ${KRB5_CONFIG}