1

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

SQL30082N 安全处理失败,原因是“24”(“用户名和/或密码无效”)。SQLSTATE=08001

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

为了解决这个问题,我已经尝试了以下方法:

  • 我在 HP-UX 上,db2 的用户帐户称为“db2inst1”。这应该根据我找到的命名规则工作。
  • SSH 连接到使用完全相同的用户名和密码的机器可以正常工作。
  • 一旦以用户 db2inst1 通过 SSH 登录,“db2 connect to SAMPLE”就可以工作了。但是,“db2 connect to SAMPLE user db2inst1”会产生上述错误,即使密码正确。
  • 通过google我发现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 节点:000 DB:示例 APPHDL:0-25775 EDUID:223 EDUUNC 代理(AMPLEdbagent) : DB2 UDB, bsu security, sqlexLogPluginMessage, probe:20 DATA 1: String with size, 67 bytes 用户 db2inst1 的密码验证失败,rc = -2146500507

2012-07-20-06.18.24.446251-360 I122554A436 级别:警告 PID
:24470 TID:223 PROC:db2sysc 0 实例:db2inst1 节点:000 DB:SAMPLE APPHDL:0-25775 EDUID:223 EDUUNC 代理(AMPLEdbagent) : DB2 UDB, bsu security, sqlexSlsSystemAuthenticate, probe:150 MESSAGE : application id: DATA #1 : String with size, 26 bytes C0A8150A.D350.120720121824

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

db2“值 SYSPROC.AUTH_GET_INSTANCE_AUTHID()”

我现在猜测它与访问权限有关。我可以通过使用查询来查看一些权限

“SELECT * FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('db2inst1', 'U') ) 由权威机构订购”

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

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

db2“将数据库上的连接授予用户 db2inst1”</p>

但没有运气,D_USER 仍然在“N”,错误仍然发生。

还有什么想法我能做什么?

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

4

2 回答 2

1

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

于 2012-07-27T10:52:21.440 回答
0

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

您可以使用该db2iupdt实用程序修复此(和其他问题)。当您的实例停止时,您需要以 root 身份运行它。文档:db2iupdt - 更新实例命令

于 2012-07-22T04:21:22.320 回答