2025年9月25日: PostgreSQL 18 发布!

PostgreSQL JDBC 42.3.2/42.2.25 安全更新

发布于 2022-02-02,作者 JDBC 项目
相关开源 安全

PostgreSQL JDBC 驱动程序已创建了一个 安全公告。该驱动程序通过 authenticationPluginClassName、sslhostnameverifier、socketFactory、sslfactory、sslpasswordcallback 连接属性提供基于类名实例化插件实例的功能。

然而,驱动程序在实例化类之前没有验证该类是否实现了预期的接口。

修复方法是确保类实现了预期的接口。这已在版本 42.2.25 和 42.3.2 中修复。此外,42.3.2 中还包含以下一些更改,完整的更改日志可以在 这里 找到。

更改

  • perf:在连接时读取 in_hot_standby GUC PR #2334
  • fix:如果 gssEncryption 为 prefer 或 require,我们将询问服务器它是否支持 GSS 加密 PR #2396,消除了在询问服务器是否支持 gss 加密之前在缓存中需要 ticket 的需求。
  • fix:为 #getBoolean BIT(>1) 抛出 SQLException PR #2386 在对 BIT(>1) 调用 CallableStatement#getBoolean(int) 时,抛出 SQLException 而不是 ClassCastException。
  • perf:在连接时读取 in_hot_standby GUC PR #2334
  • 向 chooseClientAlias 添加 cert key type 检查 PR #2417

添加

  • feat:添加 authenticationPluginClassName 选项以在运行时提供密码。添加 authenticationPluginClassName 连接属性,允许最终用户指定一个类,该类将在运行时提供连接密码。实现该接口的用户必须确保每次调用该方法都提供一个新的 char[] 数组,因为驱动程序在使用后会用零填充其内容。驱动程序中的调用站点已更新,尽可能直接使用 char[]。这包括在 GSS 身份验证代码路径中的直接使用,这些代码路径内部已将 String 密码转换为 char[] 以供内部使用。这允许配置一个需要即时生成或定期更改密码的连接。 PR #2369 原始问题 Issue #2102
  • feat:添加 tcpNoDelay 选项 PR #2341 修复 Issue #2324
  • feat:pg_service.conf 和 .pgpass 支持 (jdbc:postgresql://?service=my-service) PR #2260 修复 Issue #2278

已修复

  • 在 PgStatement 和 PgResultset 中使用本地 TimestampUtil 以实现线程安全 PR #2291 修复 Issue #921 同步共享日历的修改。
  • fix:PgObject isNull() 报告相反 Issue #2411 PR #2414
  • fix:在 Windows 上,默认文件名是 ".pg_service.conf" (而不是 "pg_service.conf") PR #2398 修复 Issue #2278
  • fix:如果设置了 fetchsize,则在读取 refcursor 后不关闭它 修复 Issue #2227 PR #2371
  • fix:重构 gss 身份验证以使用 principal name 获取凭据 修复 Issue #2235 PR #2352
  • fix:以大写返回 getIndexInfo 元数据列 PR #2368
  • fix:ConnectionFactoryImpl#tryConnect 中的连接泄漏 PR #2350 Issue #2351
  • fix:修复 IS_AUTOGENERATED 标志 PR #2348
  • fix:解析 windows 的 service 文件测试 PR #2347
  • fix:规范说明,对已关闭的连接调用 close() 是一个 noop (无操作)。 PR #2345 修复 Issue #2300
  • fix:为在 sql TIME(6) 上调用的 getTimestamp() 添加微秒精度。目前,"通过 resultSet.getTimestamp() 获取 TIME(6) 类型的值时,只能保留毫秒精度,微秒的小数位会丢失。"此更改将在调用 TIME(6) 的 .getTimestamp() 时保留微秒精度。 PR #2181 关闭 Issue #1537
  • test:物化视图权限 PR #2209 添加和删除物化视图。添加到 TestUtil,也添加到 DatabaseMetaData 的设置和拆卸中。 修复 Issue #2060
  • fix:connect.md 中的拼写错误 PR #2338 OutOfMemoryException => OutOfMemoryError
  • fix:在 PgStatement 和 PgResultset 中使用本地 TimestampUtil 以实现线程安全。TimestampUtil 不是线程安全的。当多个线程使用一个连接的 ResultSets 时,它会引发异常。 PR #2291 修复 Issue #921 如果 PgStatement 和 PgResultSet 使用自己的 TimestampUtil,则无需同步。
  • fix:CONTRIBUTING.md 中的拼写错误 PR #2332 seccion => section

PostgreSQL JDBC 团队感谢所有参与本次发布的人员!

JDBC 团队