Java - DB2连接错误SQL30082N“USERNAME AND / OR PASSWORD INVALID”

时间:2012-07-19 02:38:10

标签: java db2

我正在尝试从Java应用程序连接到远程IBM DB2 9.7数据库。 连接失败,出现以下错误:

  

SQL30082N安全处理失败,原因为“24”(“USERNAME   AND / OR PASSWORD INVALID“)。SQLSTATE = 08001

这表示用户名和密码有问题。 但是,我很确定我使用了正确的用户名和正确的密码。

我已经尝试过以下方法来解决这个问题:

  • 我在HP-UX上,db2的用户帐户名为“db2inst1”。这应该符合我发现的命名规则。
  • 使用完全相同的用户名和密码连接到机器的SSH工作正常。
  • 以用户db2inst1通过SSH登录后,“db2 connect to SAMPLE”正常工作。 但是,“db2 connect to SAMPLE user db2inst1”会产生上述错误,即使密码正确也是如此。
  • 通过谷歌我发现dbm cfg中的“数据库管理员身份验证”必须设置为SERVER。它已经设置为SERVER。
  • “db2 get dbm cfg | grep -i auth”产生以下结果:
 GSS Plugin for Local Authorization    (LOCAL_GSSPLUGIN) = 
 Server Connection Authentication          (SRVCON_AUTH) = SERVER   
 Database manager authentication        (AUTHENTICATION) = SERVER   
 Alternate authentication           (ALTERNATE_AUTH_ENC) = NOT_SPECIFIED 
 Cataloging allowed without authority   (CATALOG_NOAUTH) = NO   
 Trusted client authentication          (TRUST_CLNTAUTH) = CLIENT   
 Bypass federated authentication            (FED_NOAUTH) = NO

编辑:问题仍未解决,但我发现了更多相关信息:

Db2diag包含以下警告:

  

2012-07-20-06.18.24.445983-360 I122110A443等级:警告PID
  :24470 TID:223 PROC:db2sysc 0实例:   db2inst1 NODE:000 DB:SAMPLE APPHDL:   0-25775 EDUID:223 EDUNAME:db2agent(SAMPLE)0   功能:DB2 UDB,bsu security,sqlexLogPluginMessage,probe:20 DATA   1:大小为67字节的字符串用户db2inst1的密码验证失败,rc = -2146500507

     

2012-07-20-06.18.24.446251-360 I122554A436等级:警告PID
  :24470 TID:223 PROC:db2sysc 0实例:   db2inst1 NODE:000 DB:SAMPLE APPHDL:   0-25775 EDUID:223 EDUNAME:db2agent(SAMPLE)0   功能:DB2 UDB,bsu security,sqlexSlsSystemAuthenticate,probe:150   消息:应用程序ID:DATA#1:大小为26字节的字符串   C0A8150A.D350.120720121824

此外,对SYSPROC的一些查询也会生成错误。例如这一个:

  

db2“值SYSPROC.AUTH_GET_INSTANCE_AUTHID()”

我现在猜测它与访问权限有关。 我可以通过查询

看到一些权利
  

“SELECT * FROM TABLE”(SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID   ('db2inst1','U'))按照权限“

结果是,对于D_USER,CONNECT为“N”,对于D_GROUP为“Y”。

我猜D_USER应该在“Y”上,以便允许db2inst1连接。 因此,我尝试使用

授予此权限
  

db2“GRANT CONNECT ON DATABASE TO USER db2inst1”

但没有运气,D_USER仍处于“N”状态,错误仍然存​​在。

还有什么想法我可以做什么?

我非常感谢这个问题的帮助!

2 个答案:

答案 0 :(得分:1)

每个人,非常感谢你的想法和建议! 我今天终于设法解决了这个问题。 解决方案非常简单。密码确实是错的。 我的实例以及数据库是由脚本自动设置的。 事实证明,此脚本对操作系统上的db2inst1用户帐户和数据库的db2inst1用户帐户使用不同的密码。 在整个时间里,我不明白这些是两个不同的用户帐户,可以有不同的密码。浏览安装脚本并将其与在线db2安装教程进行比较,这对我来说很清楚。 再次,非常感谢你:))

答案 1 :(得分:0)

我怀疑~db2inst1/sqllib(特别是~db2inst1/sqllib/security/db2ckpw)中的某些文件权限已被更改。

您可以使用db2iupdt实用程序修复此问题(以及其他问题)。在实例停止时,您需要以root用户身份运行它。文档:db2iupdt - Update instances command