You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SSL证书文件认证时C# .NET 7.0无法连接Azure MySQL数据库

解决MacOS下.NET 7连接Azure MySQL失败的问题

问题根源

  1. 过时的MySQL驱动包:你使用的MySql.Data 6.8.3是基于.NET Framework开发的旧版本,对.NET 7(跨平台.NET)兼容性极差,这也是NU1701警告的直接原因。旧版本驱动不支持Azure MySQL要求的TLS 1.2+协议,进而引发bad protocol version认证错误。
  2. 冗余的SSL配置:Azure MySQL的根证书已被多数主流系统信任,手动指定本地证书反而可能在MacOS加密框架下触发兼容性问题。

解决方案步骤

1. 替换MySQL驱动包

移除过时的MySql.Data,改用MySqlConnector——这是针对.NET Core/.NET 5+优化的高性能跨平台驱动,兼容性更可靠:

  • 卸载旧包:
    dotnet remove package MySql.Data
    
  • 安装MySqlConnector:
    dotnet add package MySqlConnector --version 2.2.5
    

2. 精简项目配置(.csproj)

删除无关依赖(如SqlServer EF包,你连接的是MySQL无需该组件),保留必要项:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <!-- 若需用EF Core操作MySQL,可添加MySql的EF包 -->
    <!-- <PackageReference Include="MySqlConnector.EntityFrameworkCore" Version="2.2.5" /> -->
    <PackageReference Include="MySqlConnector" Version="2.2.5" />
    <PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
  </ItemGroup>

</Project>

3. 修改连接代码

更新命名空间,调整连接字符串配置(移除本地证书指定,强制匹配Azure要求的TLS版本):

using MySqlConnector;
using System.Text;

internal class Program
{
    private static void Main(string[] args)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder
        {
            Server = "AzureDatabaseName.mysql.database.azure.com",
            Port = 3306,
            Database = "DatabaseName",
            UserID = "AzureDBUsername",
            Password = "AzureDBPass",
            SslMode = MySqlSslMode.Required,
            TLSVersion = MySqlTlsVersion.Tls12 // 强制指定TLS 1.2,匹配Azure安全要求
        };

        // 使用using语句自动管理连接释放,无需手动Close
        using MySqlConnection conn = new MySqlConnection(builder.ConnectionString);

        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();
            Console.WriteLine("Connected!");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            Console.WriteLine("Connection closed.");
        }
    }
}

4. 额外验证(若问题仍存在)

  • 检查MacOS系统版本:确保系统已更新,支持TLS 1.2+协议
  • 确认Azure MySQL服务器设置:在Azure门户中,将MySQL服务器的最低TLS版本配置为1.2

关键说明

  • MySqlConnector是当前.NET生态中最可靠的MySQL跨平台驱动,Oracle官方的MySql.Data对.NET Core/.NET 5+的支持滞后且问题较多
  • 强制指定TLSVersion = MySqlTlsVersion.Tls12可避免驱动自动协商低版本协议的风险,完全适配Azure MySQL的安全规则

内容的提问来源于stack exchange,提问作者TiltControlledTyping

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:23:11