我正在尝试使用DB2JDBC Type4驱动程序配置DB2连接。但是我收到了这个错误。
线程“main”中的异常 com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException: [jcc] [t4] [201] [11237] [3.64.104]连接授权失败 发生了。原因:不支持安全机制。 ERRORCODE = -4214, SQLSTATE = 28000
我的代码是
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;
}
异常日志:
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)
我也尝试过IBM Data Server Driver for JDBC和SQLJ的这些支持机制
-CLIENT
-SERVER
-SERVER_ENCRYPT
-DATA_ENCRYPT
-KERBEROS
-GSSPLUGIN
-KRB_SERVER_ENCRYPT
-GSS_SERVER_ENCRYPT
为了避免加密问题,我们已将此应用程序部署到linux box。因此,如果需要安全连接,但同样的错误发生在那里。
我正在使用DB2 JDBC驱动程序版本v10.1fp1_jdbc_sqlj
,为此,我还尝试了9.5
和9.1
以及db2jcc4.jar
文件。
我也尝试使用type 2
驱动程序,但在这种情况下我遇到了ClassNotFound错误COM.ibm.db2.jdbc.app.DB2Driver
。找不到课程。
但到目前为止没有任何效果。任何帮助表示赞赏。我在一周内遇到了这个问题。
答案 0 :(得分:3)
现在正在运作。问题出在DB2上。您必须确保您的环境变量指向正确的文件夹。因此,请确保执行以下操作:
JDBC Type 2
个驱动程序。除非您的DBA询问,否则不要去Type 4
。将帮助您确保您的代码能够与Windows JDBC驱动程序进行交互
PATH=C:\Program Files\IBM\SQLLIB\BIN\db2jdbc.dll
LIB
将帮助您的代码读取正确的库。即COM.ibm.db2.jdbc.app.DB2Driver
LIB=;C:\PROGRA~1\IBM\SQLLIB\LIB
类路径:
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;
答案 1 :(得分:0)
在您的计算机上安装了数据服务器客户端时,将使用类型2驱动程序。如果在同一客户端计算机上运行DB2服务器,则可以键入2服务器。
尝试使用数据服务器客户端,以便在本地计算机中编目远程数据库,并尝试通过“db2 connect to DBName”建立连接 如果可以建立连接,则可以在Java中执行相同的操作。如果你不能,你可以找到目录选项,直到找到合适的选项。完成后,您可以连接到远程数据库。
答案 2 :(得分:-1)
服务器上配置了哪种身份验证方法?是否使用了自定义身份验证插件?您可以通过在数据库服务器上运行db2 get dbm cfg
来获取此信息。