发生DB2连接授权错误原因:Java不支持安全机制

发生DB2连接授权错误原因:Java不支持安全机制,java,database,jakarta-ee,db2,spring-jdbc,Java,Database,Jakarta Ee,Db2,Spring Jdbc,我正在尝试使用db2jdbctype4驱动程序配置DB2连接。但我得到了这个错误 线程“main”中出现异常 com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException: [jcc][t4][201][11237][3.64.104]连接授权失败 发生。原因:不支持安全机制。错误代码=-4214, SQLSTATE=28000 我的代码是 public Connection getConnection() throws ClassNotFoun

我正在尝试使用db2jdbctype4驱动程序配置DB2连接。但我得到了这个错误

线程“main”中出现异常 com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException: [jcc][t4][201][11237][3.64.104]连接授权失败 发生。原因:不支持安全机制。错误代码=-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)
为了避免加密问题,我们已将此应用程序部署到LinuxBox。所以在需要安全连接的情况下,同样的错误也会发生

我正在使用DB2JDBC驱动程序版本
v10.1fp1\uJDBC\uSQLJ
,为此我还尝试了
9.5
9.1
以及
db2jcc4.jar
文件

我还使用
type2
驱动程序进行了尝试,但在这种情况下,我发现ClassNotFound错误
COM.ibm.db2.jdbc.app.DB2Driver
。找不到类


但到目前为止,一切都不起作用。感谢您的帮助。我一周来一直在努力解决这个问题。

服务器上配置了什么身份验证方法?是否使用了自定义身份验证插件?您可以通过在数据库服务器上运行
db2getdbmcfg
来获取此信息。

当您的计算机中安装了数据服务器客户端时,将使用类型2驱动程序。如果在同一台客户机上运行DB2服务器,则可以键入2 server

尝试使用数据服务器客户端,以便在本地计算机中对远程数据库进行编目,并尝试通过“db2 connect to DBName”建立连接
如果可以建立连接,那么在Java中也可以这样做。如果你不能,你可以改变编目选项,直到找到正确的。完成此操作后,您可以连接到远程数据库。

它现在正在工作。问题在于DB2。您必须确保环境变量指向正确的文件夹。因此,请确保执行以下操作:

  • 必须在每次更改后或对环境变量进行所有更改后重新启动计算机
  • 确保您使用的是
    JDBC类型2
    驱动程序。除非DBA要求,否则不要选择
    类型4
将帮助您确保您的代码能够与Windows JDBC驱动程序交互

PATH=C:\Program Files\IBM\SQLLIB\BIN\db2jdbc.dll
LIB
将帮助您的代码读取正确的库。i、 e
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;

我刚和DBA谈过。他们说,他们没有强加任何这样的机制。另外,在现有的SOAP应用程序中,除了用户名和密码之外,它们没有使用任何单独的身份验证。DBA告诉我选择加密的用户密码,但不工作!!!!但是如果我们在linux box上部署这个应用程序呢?这意味着我们不需要在那里设置任何东西,我们认为这可能是本地计算机上的问题,所以我们将此应用程序移动到dev box。但还是一样的问题。对于DB2JDBCType2驱动程序,我得到一个错误,即“myuserid”未针对此类操作进行身份验证。线程“main”com.ibm.DB2.jcc.am.SqlException中的异常:[jcc][4038][12241][3.57.82]T2LUW异常:SQL1092N“UserID”没有执行请求的命令或操作的权限。ERRORCODE=-1092,SQLSTATE=您是否已建立到Java外部数据库的连接?使用相同的用户和密码。可能数据库中存在配置错误,我的意思是,存在与当前实现不对应的身份验证方法。是的,我使用DB2 client configuration assistant配置了连接,我选择了数据加密身份验证,并且正在工作。但当我选择用户密码和数据加密时。它的throwinf me error当然,问题是jdbc.dll文件不在PATH变量中。因此,我定义了以下系统变量PATH=C:\Program Files\IBM\SQLLIB\BIN\db2jdbc.dll,这有助于确保代码能够与Windows JDBC驱动程序LIB=交互;C:\PROGRA~1\IBM\SQLLIB\LIB将帮助您的代码读取正确的库。i、 e(COM.ibm.db2.jdbc.app.DB2Driver)也必须安装DB2Connect,它将自动设置您的环境变量。但是仍然要确保它们被正确设置并指向正确的文件夹不要忘记接受有效的答案,即使它是你自己的。
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;