# Release Notes ## Stable Release 7.0.3 - 2026-09-10 This update brings the following changes since the [7.0.2](7.0.2.md) release: The core driver and its companion packages ship together as version `7.0.3`. Update the companion packages you use alongside the driver to `7.0.3`. Assembly versions remain `7.0.0.0`, unchanged from `7.0.2`. ### Companion package release notes - [Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider 7.0.3](../add-ons/AzureKeyVaultProvider/7.0/7.0.3.md) - [Microsoft.Data.SqlClient.Extensions.Azure 7.0.3](../Extensions/Azure/7.0/7.0.3.md) — includes the Entra ID authority parsing fix for Dataverse/Dynamics 365 connections. - [Microsoft.Data.SqlClient.Extensions.Abstractions 7.0.3](../Extensions/Abstractions/7.0/7.0.3.md) - [Microsoft.Data.SqlClient.Internal.Logging 7.0.3](../Internal/Logging/7.0/7.0.3.md) ### Changed - Updated the `Microsoft.Data.SqlClient.SNI` and `Microsoft.Data.SqlClient.SNI.runtime` dependencies to 6.0.3 (was 6.0.2). ([#4599](https://github.com/dotnet/SqlClient/pull/4599)) ### Fixed - Fixed a `SqlBulkCopy` regression in environments where the application login cannot read `sys.all_columns`. Bulk copy now falls back to the earlier column-discovery behavior when that permission is unavailable. Support for hidden columns and SQL Graph column aliases still requires access to the metadata view. ([#4370](https://github.com/dotnet/SqlClient/issues/4370), [#4306](https://github.com/dotnet/SqlClient/pull/4306), [#4402](https://github.com/dotnet/SqlClient/pull/4402)) - Fixed a memory-allocation regression in connection and command operations caused by formatting diagnostic strings even when tracing was disabled. Also corrected trace messages that reported an incorrect object ID or could throw `FormatException` when traced values contained braces. ([#4528](https://github.com/dotnet/SqlClient/pull/4528), [#4533](https://github.com/dotnet/SqlClient/pull/4533)) - Fixed `ServerCertificate` validation on the managed SNI path so the configured certificate is compared against the server certificate even when the server certificate passes chain and host-name validation. When certificate validation is enabled, a missing, unreadable, or invalid certificate file, a certificate mismatch, or a missing server certificate now causes the TLS handshake to fail instead of bypassing the configured certificate check. (net8.0/net9.0 only) ([#4445](https://github.com/dotnet/SqlClient/pull/4445), [#4583](https://github.com/dotnet/SqlClient/pull/4583)) - Fixed Always Encrypted VSM/HGS enclave attestation to verify that the enclave public key used to establish a session matches the key committed to by the signed attestation report. Missing, malformed, or mismatched key-binding data now causes attestation to fail before the session secret is derived. ([#4532](https://github.com/dotnet/SqlClient/pull/4532), [#4553](https://github.com/dotnet/SqlClient/pull/4553)) - Fixed `SqlConnection.AccessTokenCallback` not disabling Transparent Network IP Resolution by default, making it consistent with `SqlConnection.AccessToken`. An explicitly configured `TransparentNetworkIPResolution` connection-string value still takes precedence. (net462 only) ([#4520](https://github.com/dotnet/SqlClient/pull/4520), [#4561](https://github.com/dotnet/SqlClient/pull/4561)) - Fixed authentication state handling so clearing `SqlConnection.AccessToken`, `AccessTokenCallback`, or `SspiContextProvider` preserves the other authentication values in the connection pool key. Cloning a connection or updating its credential also preserves its `SspiContextProvider`. Combining a non-null `SspiContextProvider` with `AccessToken` or `AccessTokenCallback` now throws `InvalidOperationException` instead of silently discarding authentication state; applications must use one authentication mechanism at a time. ([#4520](https://github.com/dotnet/SqlClient/pull/4520), [#4561](https://github.com/dotnet/SqlClient/pull/4561), [#4644](https://github.com/dotnet/SqlClient/pull/4644)) - Fixed configurable retry logic installing a permanent, process-wide assembly-resolution handler that could interfere with unrelated assembly loading. The handler is now active only while an explicitly configured custom retry provider is resolved and constructed, and probes `AppContext.BaseDirectory` instead of the current working directory. Place custom retry assemblies in the application base directory; dependencies loaded after provider construction must be resolvable through normal application dependency resolution or an application-provided handler. (net8.0/net9.0 only) ([#2214](https://github.com/dotnet/SqlClient/issues/2214), [#4547](https://github.com/dotnet/SqlClient/pull/4547), [#4663](https://github.com/dotnet/SqlClient/pull/4663)) ## Contributors We thank the following public contributors. Their efforts toward this project are very much appreciated. - [edwardneal](https://github.com/edwardneal) ## Target Platform Support - .NET Framework 4.6.2+ (Windows x86, Windows x64, Windows ARM64) - .NET 8.0+ (Windows x86, Windows x64, Windows ARM, Windows ARM64, Linux, macOS) ### Dependencies #### .NET 9.0 - Microsoft.Bcl.Cryptography 9.0.13 - Microsoft.Data.SqlClient.Extensions.Abstractions 7.0.3 - Microsoft.Data.SqlClient.Internal.Logging 7.0.3 - Microsoft.Data.SqlClient.SNI.runtime 6.0.3 - Microsoft.Extensions.Caching.Memory 9.0.13 - Microsoft.IdentityModel.JsonWebTokens 8.16.0 - Microsoft.IdentityModel.Protocols.OpenIdConnect 8.16.0 - Microsoft.SqlServer.Server 1.0.0 - System.Configuration.ConfigurationManager 9.0.13 - System.Security.Cryptography.Pkcs 9.0.13 #### .NET 8.0 - Microsoft.Bcl.Cryptography 8.0.0 - Microsoft.Data.SqlClient.Extensions.Abstractions 7.0.3 - Microsoft.Data.SqlClient.Internal.Logging 7.0.3 - Microsoft.Data.SqlClient.SNI.runtime 6.0.3 - Microsoft.Extensions.Caching.Memory 8.0.1 - Microsoft.IdentityModel.JsonWebTokens 8.16.0 - Microsoft.IdentityModel.Protocols.OpenIdConnect 8.16.0 - Microsoft.SqlServer.Server 1.0.0 - System.Configuration.ConfigurationManager 8.0.1 - System.Security.Cryptography.Pkcs 8.0.1 #### .NET Standard 2.0 - Microsoft.Bcl.Cryptography 8.0.0 - Microsoft.Data.SqlClient.Extensions.Abstractions 7.0.3 - Microsoft.Data.SqlClient.Internal.Logging 7.0.3 - Microsoft.Data.SqlClient.SNI.runtime 6.0.3 - Microsoft.Extensions.Caching.Memory 8.0.1 - Microsoft.IdentityModel.JsonWebTokens 8.16.0 - Microsoft.IdentityModel.Protocols.OpenIdConnect 8.16.0 - Microsoft.SqlServer.Server 1.0.0 - System.Configuration.ConfigurationManager 8.0.1 - System.Security.Cryptography.Pkcs 8.0.1 - System.Text.Json 10.0.3 - System.Threading.Channels 10.0.3 #### .NET Framework 4.6.2+ - Microsoft.Bcl.Cryptography 8.0.0 - Microsoft.Data.SqlClient.Extensions.Abstractions 7.0.3 - Microsoft.Data.SqlClient.Internal.Logging 7.0.3 - Microsoft.Data.SqlClient.SNI 6.0.3 - Microsoft.Extensions.Caching.Memory 8.0.1 - Microsoft.IdentityModel.JsonWebTokens 8.16.0 - Microsoft.IdentityModel.Protocols.OpenIdConnect 8.16.0 - System.Buffers 4.6.1 - System.Data.Common 4.3.0 - System.Diagnostics.DiagnosticSource 10.0.3 - System.Memory 4.6.3 - System.Runtime.InteropServices.RuntimeInformation 4.3.0 - System.Security.Cryptography.Pkcs 8.0.1 - System.Text.Json 10.0.3 - System.Threading.Channels 10.0.3 - System.ValueTuple 4.6.2