为什么启用本机加密 (ASO) 后,Oracle 中的每个错误 SQL 请求都会出现 "Checksum fail"?

Why do I have "Checksum fail" on every bad SQL request in Oracle when Native Encryption (ASO) is enabled?

我们最近将 Oracle 数据库配置为所谓的 native encryption(Oracle 高级安全选项)。

随着开发的进行,一些 SQL 查询有时会写得很糟糕,因此 JDBC 驱动程序 (ojdbc7 v12.1.0.2) 应该会返回一个错误。取而代之的是 Checksum Fail IOException 被提出。

所以问题是我们根本没有任何语法或数据库完整性错误。 SQL GUI 编辑器中的问题是相同的,例如 DBeaverSQLDeveloperSQuirrel

这是 Oracle JDBC 瘦驱动程序中的一个已知问题。如果您可以使用 SSL 而不是 ASO,那么这个问题就会消失。

我们的团队也遇到了同样的问题。

确定将 WebLogic 连接池设置为使用 SHA1 或 MD5 进行校验和加密解决了该问题(还必须将所选值添加到数据库服务器的 sqlnet.ora 文件中的已批准算法列表中当然)。

当 Oracle 尝试 return 一个 'standard' 错误,即违反约束时,尝试在客户端使用除 SHA1 或 MD5 之外的任何校验和值会产生校验和失败错误消息。

驱动程序版本 12.1 及更早版本在 SHA-2 函数中存在错误 如果能够强制服务器与 SHA-1

握手
-Doracle.net.crypto_checksum_client=REQUIRED
-Doracle.net.crypto_checksum_types=SHA1

这已在 ojdbc8.jar 版本 12.2

中修复

使用驱动程序 ojdbc7 12.1.0.1 正确的 VM 参数名称如下:

-Doracle.net.crypto_checksum_client=REQUIRED
-Doracle.net.crypto_checksum_types_client=SHA1

**如果您将记录插入数据库并看到错误则

  1. 检查您的插入值和架构,您可能正在插入空值 FK 参考值
  2. 您可能在非空列中插入了空值

**

Oracle 不会为此错误提供正确的信息