Utilizando

  • Oracle Database 11g Release 2 (11.2.0.4) Controlador JDBC «ojdbc6.jar» (a partir de esta página),
  • Oracle Database 11g Enterprise Edition Versión 11.2.0.4.0 – 64 bits de Producción (verificado por hacer «select * from v$version»)

Que estoy tratando de conectar a la base de datos desde una aplicación Java utilizando el Controlador JDBC. Esto produce un «ORA-01017: no válido nombre de usuario/contraseña de inicio de sesión denegado» mensaje.

  • Estoy 100% seguro de que el nombre de usuario y la contraseña me estoy introduciendo en mi código es correcto. He verificado que este yendo tan lejos como copiar y pegar los valores de mi código en el administrador de conexión de SQLDeveloper, donde la conexión funciona bien.
  • La ojdbc6.jar-file se importa en mi proyecto de Eclipse (como una biblioteca).
  • El TNS cadena se copia desde un tnsping el nombre TNS que trabaja en SQLDeveloper.
  • Además he comprobado que el nombre de usuario /contraseña para el servidor que estoy usando no son sensibles a mayúsculas (por la conexión en SQL developer utilizando un uppercased versión de mi nombre de usuario y contraseña, y tratando de la misma con un convertidas a minúsculas versión), ya que hubo un poco de problema con el que en los anteriores controladores JDBC.

Cosas instalado en mi equipo (sobre el cual no tengo):

  • Cliente De Oracle 11.2.0
  • SQLDeveloper Versión 4.0.1.14

No creo que estas son de interferencia, como la eliminación de la ojdbc6.jar de las bibliotecas el proyecto de Eclipse utiliza da lugar a ninguna salida (sin errores, también no hay salida de la selección-cláusula), así que estoy bastante seguro de que la delgada controlador está en el hecho de que se utiliza.

He creado una pequeña aplicación de prueba para demostrar el problema:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class OracleTester {

    public static void main(String[] args) {
        String database = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xx.xxx.xxx)(PORT=13301)))(CONNECT_DATA=(SERVICE_NAME=something)))";

        String username = "myUser";
        String password = "myPass";

        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection(database,username,password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select 'hello' from dual");
            while(rs.next()){
                System.out.println("output: " + rs.getString(0));
            }
            conn.close();
        }
        catch(Exception e){
            System.out.println(e.getLocalizedMessage());
        }

        System.out.println("Done!");
    }

}

De salida:

ORA-01017: invalid username/password; logon denied

Done!
  • Ese error es tan sencillo como que se obtiene con Oracle. ¿Qué sucede cuando usted inicie la sesión con la misma URL o de la misma cadena de conexión a través de SQL Developer o sqlplus?
  • Está seguro de que lo que ha tob ADDRESS_LIST=.. en la base de datos de la Cadena de conexión? Pensé que se acaba de DIRECCIÓN=..
  • ¿Has probado anoother conenction el patrón de jdbc:oracle:delgado:[USUARIO y CONTRASEÑA]@//[HOST][:PUERTO]/SERVICIO
  • desde SQL developer, me sale un «Estado : el Éxito» cuando se utiliza el copia-pega Identificador de conexión (tipo de conexión TNS).
  • Ahora he intentado con la alternativa de conexión patrón le sugirió – me sale el mismo error.
  • He probado con sólo la DIRECCIÓN en lugar de la primera ADDRESS_LIST y luego la DIRECCIÓN. Sigue el mismo problema.
  • Trate de usar dos barras después de la @
  • ¿Su contraseña contiene caracteres especiales? Oracle es demasiado tonto para mentir mayor parte del tiempo.
  • hicimos. No trabajo. Por favor nota: he utilizado la misma identificador de conexión en SQLDeveloper (copiar y pegar) y funcionó, así que realmente me cabe duda de que esta es donde el problema.
  • no, no es así. La contraseña funciona en otras herramientas de BTW.
  • Trate de la omisión de la Clase.forName… de la línea. ¿Qué versión de java que utilizan?
  • lo intentó, no hay diferencia. Estoy usando jre7.

InformationsquelleAutor JayVeeInCorp | 2015-03-09

3 Comentarios

  1. 2

    Un amistoso DB admin vino al rescate, y se encontró que este es en realidad un error de Oracle:

    Problem Description:
    --------------------
    When trying to connect by using the JDBC THIN 11g driver to a database 11g 
    using Enterprise User Security (EUS) connections throw invalid username/
    
    When usign the JDBC OCI driver the connection can be made.

    Y ahora – mantenga a sus sombreros:

    Available Workarounds:
    ----------------------
    Use OCI.

    Nota que he utilizado 11.2.0.4, mientras que el error dice

    Tested Versions:
    ----------------
    JDBC THIN Driver 11.1.0.6.0 and 11.1.0.7.0

    Así que al parecer se ha estado alrededor por un tiempo. No estoy seguro de que tengo esto – ¿por qué están sacando nuevas versiones de este controlador si se produce un error en la conexión a la base de datos correctamente? Parece que este sería el primer problema que todo el mundo corre al utilizar la delgada conductor?

    Pero entonces, nuestra base de datos local de administración de héroe excavado esto:

    Set the property oracle.jdbc.thinLogonCapability=o3 for the JDBC connection by passing the option oracle.jdbc.thinLogonCapability=o3 on the command line.  
    
    For example:
    java -Doracle.jdbc.thinLogonCapability=o3 <Java Class>
    
    There is no loss of security when following this workaround. 

    En Eclipse, he añadido esta línea a los argumentos de VM (Ejecutar -> Ejecutar Configuraciones -> Argumentos -> argumentos de VM -> agregar -Doracle.jdbc.thinLogonCapability=o3) y, he aquí, por fin puedo entrar en la base de datos.

    • Por favor, puedes dar más detalles? Necesito implementar esta solución mal. ¿Qué entiende usted por «=o3 <Clase de Java>» ? Debo especificar que mi nombre de clase después de o3?
    • cuando se inicia el programa de java, se está llamando a java en la línea de comandos en algún lugar. Generalmente como: «java myClassName». Ahora haz lo mismo pero escribir «java -Doracle.jdbc.thinLogonCapability=o3 myClassName»
    • He modificado la cadena de conexión. He utilizado /snombre en lugar de :sID. Esta solucionado mi problema. También, he leído en algún lugar en Oracle sitio que hay algún error en JDBC. Gracias por su respuesta, aunque! 🙂
  2. 0

    EUS (Entreprise los Usuarios) son compatibles con el JDBC-delgado conductor de partida en 11.2.0.3 pero, ¿comprobar que, efectivamente, el usuario «miusuario» se define como la USE en la base de datos? USE los usuarios se definen en un directorio central (OID, por ejemplo) y no son normales usuario que crea en la base de datos haciendo «crear usuario».

    Una nota adicional: SQLDeveloper utiliza JDBC delgado conductor. Así que si usted puede conectar con SQLDeveloper entonces usted también debe ser capaz de conectarse desde su independiente JDBC programa. Sólo asegúrese de SQLDeveloper utiliza el mismo jdbc frasco como el que está utilizando. Si desea comprobar la versión del controlador JDBC de que usted está usando sólo hacer «java -jar ojdbc7.jar» el que va a imprimir la versión.

    • De hecho podría conectar con el mismo usuario el uso de SQLDeveloper. En el SQLDeveloper directorio de instalación, sólo puedo encontrar ojdbc6.jar (en jdbc/lib), que devuelve «Oracle 11.2.0.3.0 JDBC 4.0 compilado con JDK6 en Mon_Aug_29_23:34:29_PDT_2011».
  3. 0

    Excepción Similar puede ocurrir si el nombre de usuario y contraseña especificados (incluso los valores vacíos) en oracle delgada cartera configuraciones de conexión. A continuación las configuraciones de trabajo.

        System.setProperty("oracle.net.wallet_location", [wallet location]);
        System.setProperty("oracle.net.tns_admin", [Tns location]);
    
        "url" =  "jdbc:oracle:thin:/@tns_alias"
        "driver_class" =  "oracle.jdbc.driver.OracleDriver"

Dejar respuesta

Please enter your comment!
Please enter your name here