发生 DB2 连接授权失败原因:Java 中不支持安全机制
我正在尝试使用 DB2JDBC Type4 驱动程序配置 DB2 连接.但是我收到了这个错误.
I am trying to configure DB2 connection with DB2JDBC Type4 drivers. But I am getting this error.
线程main"中的异常com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException:[jcc][t4][201][11237][3.64.104] 连接授权失败发生了.原因:不支持安全机制.错误代码=-4214,SQLSTATE=28000
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
我的代码是
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 and SQLJ 支持的这些机制
I also have tried these supported mechanisms by IBM Data Server Driver for JDBC and SQLJ
-CLIENT
-SERVER
-SERVER_ENCRYPT
-DATA_ENCRYPT
-KERBEROS
-GSSPLUGIN
-KRB_SERVER_ENCRYPT
-GSS_SERVER_ENCRYPT
为了避免加密问题,我们将此应用程序部署到 linux 机器上.所以如果需要安全连接,但那里发生同样的错误.
In order to avoid encryption problem we have deployed this application to linux box. SO in case need secure connection, but same error is occurring there.
我使用的是DB2 JDBC Driver版本v10.1fp1_jdbc_sqlj
,我也试过9.5
和9.1
和db2jcc4.jar
文件用于此目的.
I am using DB2 JDBC Driver version v10.1fp1_jdbc_sqlj
, and I have also tried 9.5
and 9.1
and db2jcc4.jar
file for this purpose.
我也尝试过使用 type 2
驱动程序,但在这种情况下 COM.ibm.db2.jdbc.app.DB2Driver
会出现 ClassNotFound 错误.找不到类.
I have also tried it using type 2
drivers, but I am getting ClassNotFound error in that case COM.ibm.db2.jdbc.app.DB2Driver
. class not found.
但到目前为止没有任何效果.任何帮助表示赞赏.一个多星期以来,我一直在努力解决这个问题.
But nothing worked so far. Any help is appreciated. I am struggling with this problem over a week.
推荐答案
现在可以了.问题出在 DB2 上.您必须确保您的环境变量指向正确的文件夹.所以一定要做到以下几点:
It's working now. The problem was with DB2. You have to make sure that your environment variables point to the correct folders. So make sure to do the following:
- 每次更改或对环境变量进行所有更改后都必须重新启动计算机.
- 确保您使用的是
JDBC Type 2
驱动程序.除非您的 DBA 要求,否则不要选择Type 4
.
- Must reboot your machine after each change or after all the change you made to your environment variables.
- Make sure that you are using
JDBC Type 2
drivers. Do not go forType 4
unless asked by your DBA.
将帮助您确保您的代码能够与 Windows JDBC 驱动程序交互
Will help you to make sure that your code will be able to interact with Windows JDBC Drivers
PATH=C:Program FilesIBMSQLLIBBINdb2jdbc.dll
LIB
将帮助您的代码读取正确的库.即 COM.ibm.db2.jdbc.app.DB2Driver
LIB
will help your code to read right libraries. i.e COM.ibm.db2.jdbc.app.DB2Driver
LIB=;C:PROGRA~1IBMSQLLIBLIB
类路径:
ClassPath = .;C:PROGRA~1IBMSQLLIBjavadb2java.jar;
C:PROGRA~1IBMSQLLIBjavadb2jcc.jar;C:PROGRA~1IBMSQLLIBjavasqlj.zip;
C:PROGRA~1IBMSQLLIBBINdb2jdbc.dll;
C:PROGRA~1IBMSQLLIBjavadb2jcc.jar;
C:PROGRA~1IBMSQLLIBjavasqlj.zip;
C:PROGRA~1IBMSQLLIBjavadb2jcc_license_cu.jar;
C:PROGRA~1IBMSQLLIBjavadb2java.jar;
C:PROGRA~1IBMSQLLIBBIN;C:PROGRA~1IBMSQLLIBjavajdk;
相关文章