Как настроить Oracle JDB C на использование внешней аутентификации с использованием Spring-JPA? - PullRequest
1 голос
/ 16 апреля 2020

В настоящее время у меня есть простое приложение Node, которое связывается с Oracle DB и аутентифицируется с использованием Kerberos. Рабочий код выглядит следующим образом ...

oracledb.externalAuth = true;
oracledb.autoCommit = true;
...
get poolConnection(){
    return oracledb.createPool({
        connectString: this.connectionString
    });
}

Обратите внимание: мне не нужны имя пользователя и пароль. Я пытался сделать то же самое в Scala, используя Spring-JPA. Моя конфигурация выглядит следующим образом ...

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: Нет подходящего протокола аутентификации

Как мне обработать Kerberos Auth с Oracle и Spring-JPA?

1 Ответ

0 голосов
/ 16 апреля 2020

Так что в моем случае, чтобы заставить его работать, мой 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

, и мне пришлось добавить это в мою stati c main, которая устанавливает приложение 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...