【问题标题】:Password is not set error when using com.ibm.as400.access.AS400JDBCDataSource with JNDI将 com.ibm.as400.access.AS400JDBCDataSource 与 JNDI 一起使用时,密码未设置错误
【发布时间】:2011-12-20 20:51:02
【问题描述】:

我正在尝试使用带有 JNDI 的 com.ibm.as400.access.AS400JDBCDataSource 建立 JDBC 连接。 当我调试时,我注意到在设置 InitialContext 时会创建一个数据源实例。当我从我的代码中获取引用时,会创建另一个实例,其中包含一个 AS400 对象的副本(其中包含 url、用户名和连接配置)。

在我调用的第一个实例上

as400Ds.setPassword("MYPWD");

问题是共享 AS400 实例时密码丢失,所以我收到此错误

Password is not set

【问题讨论】:

  • 原来如果你调用 as400ds.setSavePasswordWhenSerialized(true);在创建的第一个实例上,密码是共享的。不过,对我来说,这不是预期的行为。对于任何其他 JDBC 驱动程序,无需执行任何类似的 AFAIK。有人愿意解释这背后的原因吗?调用此方法时是否可能存在安全漏洞?还是与其他不需要等效的 jdbc 驱动程序一起使用?

标签: jdbc jndi ibm-midrange


【解决方案1】:

public void setSavePasswordWhenSerialized(boolean savePassword)

设置此数据源对象序列化时是否将密码与其余属性一起保存在本地。如果保存了密码,则由应用程序来保护对象的序列化形式,因为它包含连接到 IBM i 系统所需的所有信息。默认值为假。将密码与其他属性一起保存存在安全风险,因此默认情况下不会保存密码。如果应用程序程序员选择接受此风险,请将此属性设置为 true 以强制工具箱在数据源对象被序列化时将密码与其他属性一起保存。

IBM docs

【讨论】:

  • 感谢您的解释。出于某种原因,我在发布问题时找不到您提供的文档
  • 我知道它已经有一段时间了 - 我只是偶然发现它并写了以防万一:)欢呼
【解决方案2】:

事实证明,如果你打电话

as400ds.setSavePasswordWhenSerialized(true);

在创建的第一个实例上共享密码。

不过,对我来说,这不是预期的行为。使用任何其他 JDBC 驱动程序,无需执行任何类似的 AFAIK。

有人愿意解释一下这背后的原因吗?

调用此方法时是否可能存在安全漏洞?还是与其他不需要的 jdbc 驱动程序一起使用?

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2012-10-15
    • 2013-11-13
    • 2018-04-11
    相关资源
    最近更新 更多