具有 Oracle 高级安全选项的托管 Oracle 客户端

Managed Oracle Client with Oracle Advanced Security Options

10 月 14 日,Oracle 发布了其 Oracle Managed Client 的最新版本,据称支持网络数据加密。

http://www.oracle.com/technetwork/topics/dotnet/tech-info/odac12cr4ds-2704217.pdf https://www.nuget.org/packages/Oracle.ManagedDataAccess/

虽然出于某种原因在尝试了多种配置之后,我们仍然无法让它工作。我们不断收到包裹在 The provider did not return a ProviderManifestToken string 中的臭名昭著的 ORA-12570: Network Session: Unexpected packet read error 异常。警报日志中的错误如下TNS-12599: TNS:cryptographic checksum mismatch

我们确实与 DBA 确认我们使用的是受支持的加密算法。

此时,我唯一的附加设置如下:

  <settings>
    <setting name="SQLNET.AUTHENTICATION_SERVICES" value="NTS" />
    <setting name="NAMES.DIRECTORY_PATH" value="LDAP,tnsnames" />
  </settings>

编辑:升级到 ODP.NET Managed 12.2 或更高版本。那里引入了对数据完整性算法的支持:https://docs.oracle.com/cd/E85694_01/ODPNT/featConnecting.htm#ODPNT8536

ODP.NET,Managed Driver 12.1 及更早版本尚不支持数据完整性算法:

http://docs.oracle.com/cd/E63277_01/win.121/e63268/featConnecting.htm#CJAGFFCA

这会导致数据库警报日志中出现 TNS-12599:TNS:cryptographic 校验和不匹配错误,进而导致各种客户端错误,例如 ORA-12570:网络会话:意外数据包读取错误或 ORA- 12537:网络会话:文件结束。

如果您被迫使用 ODP.NET 托管版本 12.1 而无法升级到 12.2 或更高版本,这可以通过更改数据库端 SQLNET.ORA 参数来解决,这样就不需要校验和了:

sqlnet.crypto_checksum_client = 已接受

sqlnet.crypto_checksum_server = 已接受