我正在使用MySQL工作台访问远程数据库。目前正在工作: MySQL workbench screenshot
现在,我尝试使用Visual Studio 2017 vb.net访问相同的数据库。这是我到目前为止所拥有的:
Dim connectionInfo As PasswordConnectionInfo
Dim client As SshClient
Dim portFwld As ForwardedPortLocal
connectionInfo = New PasswordConnectionInfo("ipaddress", 22, "me", "password1") With {
.Timeout = TimeSpan.FromSeconds(30)
}
client = New SshClient(connectionInfo)
client.Connect()
If client.IsConnected Then
MsgBox("SSH")
Else
MsgBox("Wrong")
End If
portFwld = New ForwardedPortLocal("127.0.0.1", 0, "127.0.0.1", 3306)
client.AddForwardedPort(portFwld)
portFwld.Start()
MsgBox("Started")
conn = New MySqlConnection("server = 127.0.0.1; port = 3306; uid = 'me'; password = 'password'; database='xxx'")
MsgBox(conn.ConnectionString)
conn.Open()
不幸的是,我在conn.Open()行上收到以下错误:
:'使用方法'caching_sha2_password'对用户'me'的主机'127.0.0.1'的身份验证失败,并显示以下消息:用户'me'@'localhost'的访问被拒绝(使用密码:是)'
我想它与'caching_sha2_password'有关,因为在mysql工作台->用户和特权->我中,身份验证类型设置为标准。
我更改了这些行,现在可以正常工作了:)
portFwld = New ForwardedPortLocal("127.0.0.1", 3305, "127.0.0.1", 3306)
(...)
conn = New MySqlConnection("server = 127.0.0.1; port = 3305; uid = 'me'; password = 'password'; database='xxx'; ssl mode = none;")
另外两个小问题:
谢谢
答案 0 :(得分:0)
您的连接字符串指向端口3306,但是您将值'0'传递给ForwardedPortLocal
构造函数;这允许系统选择一个随机端口。
我相信您应该将构造函数更改为:
portFwld = New ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306)
即明确设置boundPort
参数(第二个参数)与您在连接字符串中传递的端口值相同。
当然,如果使用了3306本地端口(例如,如果您在默认端口上本地运行MySQL),则无法使用;您应该选择另一个端口,并在porrFwld构造函数和连接字符串中使用相同的值。远程端口应为3306(用于标准MySQL安装)。