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

通过Workbench可访问MySQL,但VB.NET经SSL隧道连接失败求助

VB.NET SSH隧道连接MySQL失败排查方案

问题概述

使用与Workbench完全一致的SSH(主机名、用户名、密码)及MySQL(主机名、端口、用户名、密码)连接信息,Workbench可正常访问外部MySQL服务器,但VB.NET代码连接时持续抛出权限拒绝错误:

MySql.Data.MySqlClient.MySqlException: 'Authentication to host 'localhost' for user 'myuser' using method 'mysql_native_password' failed with message: Access denied for user 'myuser'@'localhost' (using password: YES)'
或
MySqlConnector.MySqlException: Access denied for user 'myuser'@'localhost' (using password: YES)

已尝试MySql.Data.MySqlClient、MySqlConnector两个库,以及多种隧道端口配置和连接字符串写法,均未解决问题。

排查步骤与解决方案

1. 修正SSH隧道的目标MySQL地址

Workbench的SSH隧道配置中,MySQL主机名可能并非127.0.0.1——部分远程服务器的MySQL绑定内网IP而非回环地址,或需指定实际主机标识:

  • 打开Workbench连接设置,查看MySQL Hostname字段值(例如可能是远程服务器的内网IP192.168.1.100)
  • 调整VB.NET中的隧道目标地址,示例:
    ' 将原目标地址127.0.0.1替换为Workbench中配置的MySQL Hostname
    portFwld = New ForwardedPortLocal("127.0.0.1", 0, "192.168.1.100", 3306)
    

2. 验证MySQL用户的权限范围

MySQL权限基于用户名@来源IP规则,myuser@localhost与myuser@%是独立权限条目:

  • 通过Workbench或远程SSH登录MySQL,执行以下命令查看用户权限:
    SELECT user, host FROM mysql.user WHERE user = 'MyUserDB';
    
  • 如果用户的host仅为localhost,需确保隧道转发后的连接对MySQL来说属于本地来源;若权限不足,执行:
    -- 授予本地访问权限
    GRANT ALL PRIVILEGES ON MyDB.* TO 'MyUserDB'@'localhost';
    FLUSH PRIVILEGES;
    
    (生产环境建议最小权限,避免使用%通配符)

3. 优化MySQL连接字符串细节

  • 强制使用TCP连接:将Data Source=localhost改为Data Source=127.0.0.1,避免MySQL优先使用socket/命名管道连接
  • 明确指定SSL模式:根据服务器配置添加SslMode=None或SslMode=Required
  • 动态端口验证:输出portFwld.BoundPort确认端口正确,示例连接字符串:
    .ConnectionString = $"port={portFwld.BoundPort};Database=MyDB;Data Source=127.0.0.1;User Id=MyUserDB;Password=MyPassword;SslMode=None"
    
  • 检查用户名/密码大小写:Linux环境下MySQL用户名、密码可能区分大小写

4. 确认SSH隧道状态

  • 在代码中添加状态校验:
    client.Connect()
    If Not client.IsConnected Then
        MsgBox("SSH连接失败")
        Return
    End If
    portFwld.Start()
    If Not portFwld.IsStarted Then
        MsgBox("隧道端口启动失败")
        Return
    End If
    Debug.WriteLine($"绑定端口:{portFwld.BoundPort}")
    
  • 用工具测试本地端口连通性:
    Test-NetConnection 127.0.0.1 -Port [输出的绑定端口号]
    
    若无法连接,检查SSH用户名、密码、端口是否正确,以及远程服务器是否允许SSH连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:25:38