1

我一直在为我的数据库机器(Oracle 11g)使用 Oracle 云 PAAS linux 服务器,并拥有可以运行所有 Java 应用程序的 linux 应用程序服务器。

假设我有可以连接云数据库机器的基于弹簧的 Web 应用程序。我试图访问 Toad for oracle 中的模式,它按预期工作,但是当我尝试访问数据库以从应用程序中检索数据时,它给出了以下错误。

java.sql.SQLException: Io exception: Oracle Error ORA-12650
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:154)
    at GetConnection.main(GetConnection.java:35)

我还尝试将服务访问从 SID 扩展到 DB 机器中的服务名称。仍然给出同样的错误。相同的代码在我们设置的另一台云机器上运行良好。但是这个云机是oracle团队做的,大部分都是默认的。

请分享您的建议以解决此问题。

4

3 回答 3

1

它根本没有帮助我。实际上,我遵循了您的解决方案,但最终遇到了另一个比试图解决的错误更严重和更严重的错误。让我解释。首先,您提到的“禁用”值甚至不是该参数的可接受值。根据 Oracle ( Oracle Docs ),这些是任何人都可以使用的公认值:

SQLNET.ENCRYPTION_SERVER 用途

为数据库服务器打开加密。

默认

公认

价值观

  • accepted:在对方需要或请求时启用安全服务。

  • rejected:禁用安全服务,即使对方要求。

  • requested:在对方允许的情况下启用安全服务。

  • required:启用安全服务,如果对方未启用安全服务,则禁止连接。

例子

SQLNET.ENCRYPTION_SERVER=accepted

在我的情况下,作为 12c Oracle Cloud 数据库,默认设置为“必需”,在尝试启动我的应用程序时出现错误“Io 异常:Oracle 错误 ORA-12650”。将参数设置为“已接受”解决了问题并设法启动了我的应用程序。如果您仍然收到错误,您还可以将以下参数设置为接受: SQLNET.CRYPTO_CHECKSUM_SERVER = 接受 如果您在 sqlnet.ora 中看到该值设置为“必需”。

请记住,我的应用程序以及我的 OCI 设置仅用于测试目的,它们不打算在生产环境中使用。SQLNET.ENCRYPTION_SERVER将和的值设置SQLNET.CRYPTO_CHECKSUM_SERVER为“已接受”将显着降低数据库的安全性,使其容易受到任何有权访问它的应用程序的攻击。最好的情况是修改您的应用程序以将 ENCRYPTION 用作“必需”。

于 2018-09-04T15:14:12.340 回答
1

此问题是由于 Oracle DB 机器加密ENCRYPTION_SERVER设置造成的。据我了解,这是默认设置并将其设置为启用,当我们将其设置为禁用或注释该行时,应用程序将按预期工作。以下是供参考的文件名,

Filename : sqlnet.ora (We have to disable ENCRYPTION_SERVER settings)
File Location : ../oracle/product/11.2.0/dbhome_1/network/admin 

希望这对某人有帮助。!

于 2017-10-25T18:37:51.450 回答
0

将 OJDBC jar 降级到 version7 也可以 - 在依赖文件中用 ojdbc7.jar 替换更高版本(在我的情况下,ojdbc14.jar 是罪魁祸首)

于 2021-02-19T03:32:15.340 回答