descargar - Autorización de conexión de DB2 Razón ocurrida Faliure: Mecanismo de seguridad no admitido en Java
jar jdbc db2 (3)
¿Qué método de autenticación está configurado en el servidor? ¿Se utiliza algún complemento de autenticación personalizado? Puede obtener esta información ejecutando db2 get dbm cfg
en el servidor de la base de datos.
Estoy intentando configurar la conexión de DB2 con los controladores DB2JDBC de tipo 4. Pero estoy obteniendo este error.
Excepción en el subproceso "principal" com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException: [jcc] [t4] [201] [11237] [3.64.104] Se produjo un error de autorización de conexión. Motivo: mecanismo de seguridad no admitido. ERRORCODE = -4214, SQLSTATE = 28000
Mi código es
public Connection getConnection() throws ClassNotFoundException, InstantiationException,
IllegalAccessException, SQLException{
Driver driver = (Driver) Class.forName ( "com.ibm.db2.jcc.DB2Driver" ).newInstance();
DriverManager.registerDriver(driver);
Connection connection = DriverManager.getConnection("jdbc:db2://hostname:portnumber
/DBName", "username","password" );
System.out.println( "From DAO, connection obtained " );
return connection;
}
Registro de excepciones:
Exception in thread "main" com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException:
[jcc][t4][201][11237][3.64.104] Connection authorization failure occurred.
Reason: Security mechanism not supported. ERRORCODE=-4214, SQLSTATE=28000
at com.ibm.db2.jcc.am.bd.a(bd.java:677)
at com.ibm.db2.jcc.am.bd.a(bd.java:60)
at com.ibm.db2.jcc.am.bd.a(bd.java:120)
at com.ibm.db2.jcc.t4.b.f(b.java:2389)
at com.ibm.db2.jcc.t4.b.a(b.java:1712)
at com.ibm.db2.jcc.t4.y.b(y.java:3612)
at com.ibm.db2.jcc.t4.y.a(y.java:477)
at com.ibm.db2.jcc.t4.y.a(y.java:117)
at com.ibm.db2.jcc.t4.b.c(b.java:1350)
at com.ibm.db2.jcc.t4.b.b(b.java:1221)
at com.ibm.db2.jcc.t4.b.b(b.java:788)
at com.ibm.db2.jcc.t4.b.a(b.java:760)
at com.ibm.db2.jcc.t4.b.a(b.java:421)
at com.ibm.db2.jcc.t4.b.a(b.java:396)
at com.ibm.db2.jcc.t4.b.<init>(b.java:334)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:232)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:198)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:475)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:116)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at com.test.connection.DB2ConnectionFactory.getConnection(DB2ConnectionFactory.java:19
at com.test.connection.ConnectionTest.main(ConnectionTest.java:18)
También he probado estos mecanismos soportados por IBM Data Server Driver para JDBC y SQLJ
-CLIENT
-SERVER
-SERVER_ENCRYPT
-DATA_ENCRYPT
-KERBEROS
-GSSPLUGIN
-KRB_SERVER_ENCRYPT
-GSS_SERVER_ENCRYPT
Para evitar el problema de encriptación, hemos implementado esta aplicación en linux box. SO en caso de necesitar conexión segura, pero el mismo error está ocurriendo allí.
Estoy usando DB2 JDBC Driver versión v10.1fp1_jdbc_sqlj
, y también he intentado con 9.5
y 9.1
y el archivo db2jcc4.jar
para este propósito.
También lo intenté con los controladores type 2
, pero obtengo el error ClassNotFound en ese caso COM.ibm.db2.jdbc.app.DB2Driver
. clase no encontrada
Pero nada funcionó hasta ahora. Cualquier ayuda es apreciada. Estoy luchando con este problema durante una semana.
El controlador tipo 2 se usa cuando tiene instalado el cliente del servidor de datos en su máquina. Si está ejecutando el servidor de DB2 en la misma máquina cliente, puede hacerlo con el servidor de Tipo 2.
Intente utilizar el cliente del servidor de datos, para catalogar la base de datos remota en su máquina local, y trate de establecer una conexión a través de "db2 connect to DBName". Si puede establecer la conexión, puede hacer lo mismo en Java. Si no puede, puede cambiar las opciones de catalogación hasta que encuentre la correcta. Una vez que haya hecho eso, puede conectarse a la base de datos remota.
Está funcionando ahora. El problema fue con DB2. Debe asegurarse de que las variables de entorno apunten a las carpetas correctas. Así que asegúrese de hacer lo siguiente:
- Debe reiniciar su máquina después de cada cambio o después de todos los cambios realizados en las variables de entorno.
- Asegúrese de estar utilizando controladores
JDBC Type 2
. No vaya por elType 4
menos que su DBA lo solicite.
Te ayudará a asegurarte de que tu código pueda interactuar con los controladores JDBC de Windows.
PATH=C:/Program Files/IBM/SQLLIB/BIN/db2jdbc.dll
LIB
ayudará a su código a leer las bibliotecas correctas. es decir COM.ibm.db2.jdbc.app.DB2Driver
LIB=;C:/PROGRA~1/IBM/SQLLIB/LIB
ClassPath:
ClassPath = .;C:/PROGRA~1/IBM/SQLLIB/java/db2java.jar;
C:/PROGRA~1/IBM/SQLLIB/java/db2jcc.jar;C:/PROGRA~1/IBM/SQLLIB/java/sqlj.zip;
C:/PROGRA~1/IBM/SQLLIB/BIN/db2jdbc.dll;
C:/PROGRA~1/IBM/SQLLIB/java/db2jcc.jar;
C:/PROGRA~1/IBM/SQLLIB/java/sqlj.zip;
C:/PROGRA~1/IBM/SQLLIB/java/db2jcc_license_cu.jar;
C:/PROGRA~1/IBM/SQLLIB/java/db2java.jar;
C:/PROGRA~1/IBM/SQLLIB/BIN;C:/PROGRA~1/IBM/SQLLIB/java/jdk;