要解决密码安全问题,我们需要设置SQLNET.ALLOWED_LOGON_VERSION=12
. 根据Oracle 数据库网络服务参考:
请注意将该值设置为 12 的以下含义: ... Oracle 数据库 10g 之前的 OCI 客户端版本和所有版本的 JDBC 瘦客户端无法使用基于密码的身份验证对 Oracle 数据库进行身份验证。
这句话在我看来真的很糟糕。我不想在体面的密码安全性和推荐的 JDBC 驱动程序之间做出选择。
好消息是手册可能有误。我可以连接SQLNET.ALLOWED_LOGON_VERSION=12
一个 JDBC 瘦客户端。我确实必须将 ojdbc.jar 从 11.2.0.1.0 升级到 Oracle 11.2.0.3.0,但这是意料之中的,也证明该设置确实对我的服务器产生了影响。
这里发生了什么:
- 说明书错了吗?
- 我读错手册了吗?
- 它是否仅在我的简单测试用例中作为一些未记录的功能起作用,但会因其他配置而失败?
我们有成千上万的用户,有许多不同的配置,我不能仅仅依靠我的简单测试。有没有其他人同时使用SQLNET.ALLOWED_LOGON_VERSION=12
JDBC 瘦客户端的经验?
我也刚刚测试过,发现我可以毫无错误地连接 11.2.0.3/11.2.0.4 JDBC 瘦客户端,但是当使用 10.2.0.4 等较旧的瘦客户端时,我得到了预期的
ORA-28040: No matching authentication protocol
.在我看来,最合乎逻辑的解释是 Oracle 自 2011 年以来多次更新此文档,而您引用的特定行今天实际上是不正确的。在 11.0.2.3 之前可能是正确的。
Oracle 不维护更改日志(例如您可以在 FOSS 项目、维基百科文章甚至 StackExchange 问题中找到)。但是,如果页面被 Internet Archive Wayback Machine 抓取,您有时会很幸运。原来这个 Oracle 文档是,所以我们很幸运,他们有可以追溯到 2011 年的快照,比 CPUOct2012 早一年。 https://web.archive.org/web/20110715000000 */ http://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm
奇怪的是,如果您查看上面文档的 2011 年 12 月版本,您引用的段落实际上是说(当时):
在我看来,甲骨文的某个人在没有研究其含义的情况下将数字从 11 更新为 12 。
我投票给答案#1,手册是错误的。
附录:除了上述批评之外,您可能希望在 Oracle 文档底部提交“读者评论”,或提交 SR,或两者兼而有之。如果您有 Oracle 客户关系,您可能会支付很多钱,所以不妨利用它并提交 SR。无论甲骨文以何种方式回应,您的 a$$ 都已涵盖。我非常希望看到甲骨文对这个问题的回应。