使用 Oracle 厚 OCI 驱动程序的 Grails 使用错误的用户向 Oracle 进行身份验证

Grails with Oracle thick OCI driver authenticate to Oracle with wrong user

我已经通过在

中添加以下行来使用存储在 Oracle 钱包中的证书设置对 Oracle 进行身份验证

sqlnet.ora。 sqlnet.ora 位于我的 Linux 主目录中。

 WALLET_LOCATION =
    (SOURCE =
      (METHOD = FILE)
      (METHOD_DATA =
        (DIRECTORY = my_wallet_location)
      )
     )

 SQLNET.WALLET_OVERRIDE = TRUE

并在DataSource.groovy

中将用户名和密码设置为“”
 username=""
 password=""

然而,在我启动我的 grails 应用程序后,我发现我的应用程序进行了 os 身份验证,它让我以 ops$john 的身份登录到 Oracle as supposed to john 并且完全无视我的钱包设置。

请指教。

更新:

这是 DataSource.groovy

的其余部分
dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "oracle.jdbc.driver.OracleDriver"
    username=""
    password=""
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
//    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:oracle:oci:@//myhost:myport/myinstance"
            properties {
                // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
                jmxEnabled = true
                initialSize = 5
                maxActive = 50
                minIdle = 5
                maxIdle = 25
                maxWait = 10000
                maxAge = 10 * 60000
                timeBetweenEvictionRunsMillis = 5000
                minEvictableIdleTimeMillis = 60000
                validationQuery = "SELECT 1"
                validationQueryTimeout = 3
                validationInterval = 15000
                testOnBorrow = true
                testWhileIdle = true
                testOnReturn = false
                jdbcInterceptors = "ConnectionState"
                defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
             }
        }
    }
}

你应该在这个 format: jdbc:oracle:oci:/@alias 中使用 url,其中别名是你 tnsnames.ora 文件中的钱包别名。

此选项记录在多个地方,例如 here and here. Most documentation is referencing the thin driver but it works the same way with the OCI driver. This post 描述了使用 OCI 驱动程序创建和使用钱包的完整过程