3

問題なく Oracle DB にアクセスする多くのテストがありますが、コードベースでキーストアを使用する他のテストと一緒にこれらのテストを実行すると、DB とやり取りするテストが接続できなくなります。彼らが得る例外は次のとおりです。

原因: java.sql.SQLException: ORA-01017: 無効なユーザー名/パスワード。oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIOer.java:439) で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388) でログオンが拒否されました。 :381) oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564) で oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431) で oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun. java:436) oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) oracle.jdbc.driver.T4CTTIOauthenticate.doOAUTH(T4CTTIoauthenticate.java:366) oracle.jdbc.driver.T4CTTIOauthenticate.doOAUTH(T4CTTIOauthenticate) .java:752) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359) at oracle.jdbc.

明らかに、ユーザー名とパスワードはまだ正しいです。コードの何が原因で接続が失敗したのかを突き止めるのに非常に苦労しています。また、Oracle ドライバーが接続を試みたときに何が起こっているのかをデバッグする方法もよくわかりません。Oracle 11g で Oracle シン ドライバを使用しています。Spring、Hibernate、および Apache Commons DBCP を使用しています。ドライバーが DB への SSL 接続を確立しようとしているようです。よくわかりませんが。SQL Server をまだ使用していたときに、SQL Server で非常によく似た問題が発生したことを覚えているようですが、そのときは無視しました。現在、キーストアと対話するテストを別のバッチと JVM で実行しています。

どんな助けでも大歓迎です。

更新しました

私はさらに多くのデバッグを行い、最終的にこれを追跡して、Spring-WS を介した wss4j ライブラリ (バージョン 1.5.9) の使用にたどり着きました。最終的に、WSSConfig クラスは、これを行う一連のコードに到達します。

int ret = 0;
for (int i = 0; i < provs.length; i++) {
    if ("SUN".equals(provs[i].getName())
        || "IBMJCE".equals(provs[i].getName())) {
        ret =
            java.security.Security.insertProviderAt(
                (java.security.Provider) c.newInstance(), i + 2
            );
        break;
    }
}

このコードの直後に、Oracle への接続が機能しなくなります。弾むキャッスル プロバイダを使用して insertProviderAt メソッドが呼び出されると、Oracle 接続が失敗し始めるようです。何か案は?

最小限のテスト ケース

最初の接続試行は成功しますが、2 回目の試行は失敗します。

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@server/servicename", "username", "password");
conn.prepareStatement("select * from dual").getResultSet();
conn.close();
org.apache.ws.security.WSSConfig.getDefaultWSConfig();
conn = DriverManager.getConnection("jdbc:oracle:thin:server/servicename", "username", "password");
conn.prepareStatement("select * from dual").getResultSet();
conn.close();

WSSConfig Initialize メソッド

private synchronized void
    staticInit() {
        if (!staticallyInitialized) {
            org.apache.xml.security.Init.init();
            if (addJceProviders) {
                /*
                 * The last provider added has precedence, that is if JuiCE can be added
                 * then WSS4J uses this provider.
                 */
                addJceProvider("BC", "org.bouncycastle.jce.provider.BouncyCastleProvider");
                addJceProvider("JuiCE", "org.apache.security.juice.provider.JuiCEProviderOpenSSL");
            }
            Transform.init();
            try {
                Transform.register(
                    STRTransform.implementedTransformURI,
                    "org.apache.ws.security.transform.STRTransform"
                );
            } catch (Exception ex) {
                if (log.isDebugEnabled()) {
                    log.debug(ex.getMessage(), ex);
                }
            }
            staticallyInitialized = true;
        }
    }
4

3 に答える 3

0

SEC_CASE_SENSITIVE_LOGONOracleでパラメータが設定されている場合、ログオン拒否エラーが表示されることがありますtrue。経由で確認しSHOW PARAMETER SEC_CASE_SENSITIVE_LOGON、変更することができますALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

これで、エラーが解決されるはずです。

于 2013-03-01T10:02:10.393 に答える
0

1.ファイルを修正する

%JAVA_HOME%/jre/lib/security/java.security
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

例:

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

または2。

WSSConfig.setAddJceProviders(false);
于 2014-03-19T01:51:18.193 に答える