我正在尝试从Java应用程序连接到远程IBM DB2 9.7数据库。 连接失败,出现以下错误:
SQL30082N安全处理失败,原因为“24”(“USERNAME AND / OR PASSWORD INVALID“)。SQLSTATE = 08001
这表示用户名和密码有问题。 但是,我很确定我使用了正确的用户名和正确的密码。
我已经尝试过以下方法来解决这个问题:
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 = -21465005072012-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”状态,错误仍然存在。
还有什么想法我可以做什么?
我非常感谢这个问题的帮助!
答案 0 :(得分:1)
每个人,非常感谢你的想法和建议! 我今天终于设法解决了这个问题。 解决方案非常简单。密码确实是错的。 我的实例以及数据库是由脚本自动设置的。 事实证明,此脚本对操作系统上的db2inst1用户帐户和数据库的db2inst1用户帐户使用不同的密码。 在整个时间里,我不明白这些是两个不同的用户帐户,可以有不同的密码。浏览安装脚本并将其与在线db2安装教程进行比较,这对我来说很清楚。 再次,非常感谢你:))
答案 1 :(得分:0)
我怀疑~db2inst1/sqllib
(特别是~db2inst1/sqllib/security/db2ckpw
)中的某些文件权限已被更改。
您可以使用db2iupdt
实用程序修复此问题(以及其他问题)。在实例停止时,您需要以root用户身份运行它。文档:db2iupdt - Update instances command