【问题标题】:Problem in establishing DB2 connection in Java with wrong username/password使用错误的用户名/密码在 Java 中建立 DB2 连接时出现问题
【发布时间】:2011-07-07 04:37:41
【问题描述】:

我在使用错误的用户名/密码建立 DB2 连接时遇到问题。我们有一个应用程序,它在许多系统上运行在 LAN 上,使用位于我的系统以及其他系统上的 DB2 数据库。

首先我使用这个 URL 创建其他系统 DB2 连接:

Connection con = DriverManager.getConnection("jdbc:db2://Rahulkcomputer:50000/XAN4", "rahulk", "dbirs#35");

这会返回正确的 Connection 对象。现在,当我更改 URL 以使用相同的用户名/密码访问我的系统 DB2 连接时(强烈使用相同的用户名/密码来检查错误处理):

Connection con = DriverManager.getConnection("jdbc:db2://127.0.0.1:50000/XAN4", "rahulk", "dbirs#35");

这一次它再次返回 Connection 对象,而不是抛出指定错误用户名/密码的 SQLException(由于我的系统的 DB2 身份验证与 Rahulkcomputer 的系统完全不同)

获得连接后,我执行此查询以检查正确的用户名,如帖子中所述:

Simple DB2 Query for connection validation

SELECT CURRENT SQLID FROM SYSIBM.SYSDUMMY1

(这两种情况都返回“rahulk”)

为什么 DB2 在第二种情况下使用错误的用户名/密码创建了连接(此外,当我们关闭 Rahulkcomputer 上 DB2 的所有服务时,即使在第二种情况下我也得到了连接)?

提前致谢。

【问题讨论】:

  • 我是否因为没有得到任何潜在客户而在错误的标签下发布?请说明。
  • 您是否确认您可以通过该连接实际插入数据,如果可以,数据位于哪台计算机上?您确定在执行代码之前编译了 .java 文件吗?
  • 嗨 Joachim Sauer,实际上在第二种情况下建立的连接不允许运行任何查询,它还会抛出 SQL 异常 SQLCODE=-204, SQLSTATE=42704。我的问题是,如果无法执行查询,那么为什么要创建连接?是的。我在执行代码之前编译了我的 .java 文件。请给出具体答案,如果你知道。提前致谢。

标签: java jdbc db2 db2-connect


【解决方案1】:

您要么使用 restrictive 选项创建了数据库,要么撤销了从 PUBLIC 对 sysibm 的选择权限。你的连接很好,访问权限不行。 42704 是 DB2 说“嗯?”的方式,它无法识别 sysibm,因为您无权查看它。

【讨论】:

  • 如果一个 ID 没有权限访问 SYSIBM.SYSDUMMY1,上面的查询不会得到 SQL0204N ("object not found"),它会得到 SQL0551N ("ID doesn't have required authorization或特权”)。如果故障实际上是​​ SQL0204N,则意味着系统上不存在 SYSIBM.SYSDUMMY1。
  • 只有在安装严重失败时才会发生这种情况。例如,在安装 fixpack 时不重新绑定所有默认包可以做到这一点,但仍然不太可能?
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多