我正在尝试从 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 = -21465005072012-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”,错误仍然发生。
还有什么想法我能做什么?
我非常感谢在这个问题上的帮助!