首页 文章

ORA-01017:用户名/密码无效;使用wss4j时登录被拒绝

提问于
浏览
3

我有很多测试可以毫无问题地访问我们的Oracle数据库,但是当我在使用密钥库的代码库中运行这些测试以及其他测试时,与数据库交互的测试不再能够连接 . 以下是他们获得的例外情况:

引起:java.sql.SQLException:ORA-01017:用户名/密码无效;登录在oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)的oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)处于oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java) :381)oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564)at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun . java:436)oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate .java:752)oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359)at oracle.jdbc.driver.PhysicalConnection . (PhysicalConnection.java:531)at oracle.jdbc.driver.T4CConnection . (T4CConnection . java:221)oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)at org.apache.com上的oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503) mons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)位于org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java: 877)在org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851)... 68更多

显然用户名和密码仍然正确 . 我很难搞清楚我们的代码中导致连接失败的原因,而且我真的不知道如何调试Oracle驱动程序尝试连接时发生的情况 . 我在Oracle 11g中使用Oracle瘦驱动程序 . 我们使用Spring,Hibernate和Apache Commons DBCP . 似乎驱动程序可能正在尝试与数据库 Build SSL连接?我不确定 . 我似乎还记得当我们使用它时,SQL Server的一个非常类似的问题,当时我只是忽略了它 . 现在,我们在单独的批处理和JVM中运行与密钥库交互的测试 .

任何帮助将不胜感激 .

UPDATED

我做了一些调试,最后通过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连接开始失败 . 有任何想法吗?

Minimal Test Case

第一次连接尝试成功,但第二次尝试失败 .

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 Method

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;
        }
    }

3 回答

  • 1

    缺少第二个连接字符串中的添加符号

  • 0

    如果在oracle中参数 SEC_CASE_SENSITIVE_LOGON 设置为 true ,则可以显示登录被拒绝错误 . 您可以通过 SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON 进行检查并通过 ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; 进行更改

    现在错误应该得到解决 .

  • 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);
    

相关问题