我的网站有hostgator,我想用C#windows应用程序访问mysql数据库但是当我尝试连接时收到了这条消息:
“不再支持使用旧密码进行身份验证,请使用4.1样式 密码“
我试过给定解决方案:
SET SESSION old_passwords=0;
SET PASSWORD FOR user@host=PASSWORD('your pw here');
第一个查询执行成功但我在执行第二个查询时收到错误“用户@主机访问被拒绝”。我不明白为什么会出现这个问题。我使用的是MySQL-connecter-net 6.6.5。
我成功地将我的数据库与MySql workbench 5.2.47连接。
任何人都可以帮助我,我可以做些什么吗?
我已联系我的托管网站,他们对my.cnf文件进行了更改以使用4.1样式密码。我能够连接mysql
mysql -u <username> -p <password> -h <hostname>;
但是当我尝试使用mySQL连接器网6.6.5连接C#时,我再次收到此错误。
我在Windows 8 64位上使用带有MySQL连接器6.6.5的Visual Studio 2012。这是我用来连接的代码
using MySQL.Data.MySQLClient;
private void button1_Click(object sender, EventArgs e)
{
string connStr = String.Format("server={0};port={1};uid={2};password={3};database={4}",
txtserver.Text, txtPort.Text, txtUser.Text, txtPassword.Text, txtDatabase.Text);
conn = new MySqlConnection(connStr);
try
{
conn.Open();
MessageBox.Show("Test Connection Succeded");
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
}
}
我无法理解问题所在。请帮帮我
答案 0 :(得分:21)
我遇到了同样的问题。在我的例子中,只需通过Workbench运行我的数据库下面连接的命令:
SET SESSION old_passwords=0;
SET PASSWORD FOR my_user=PASSWORD('my_password');
之后,我可以使用常见的mysql连接字符串在c#代码中使用MySql Connector 6.6.5连接:
"server=my_server_ip;user=my_user;database=my_db;port=3306;password=my_password;"
答案 1 :(得分:5)
今天我在C#应用程序中遇到了类似的问题。我尝试连接到hostgator.com(mysql)上的服务器并连接到localhost。在阅读了很多帖子并做了很多修改之后,每一步都跟着我无法连接到我的hostgator mysql。
我的解决方案是将MySql Connector / NET库从版本6. *更改为版本5. *。更改后,我的应用程序连接成功。
虽然这对每个人来说可能都不是一个可行的解决方案,但它可能适用于某些人。
答案 2 :(得分:3)
我今天遇到了这个问题,但我修好了如下:
SET old_passwords=FALSE;
SET PASSWORD = PASSWORD('new pwd here');
好吧,也许服务器的连接版本低于客户端,所以你必须运行它:“SET old_passwords = FALSE;” 祝你好运!
答案 3 :(得分:2)
使用MySqlClient包进行C#时遇到同样的问题。让我们分解一下:
我们需要数据库不使用旧式密码,因此我们执行
SET old_passwords = 0;
通知没有&#34; SESSION&#34;关键词。这是只允许您的第一个查询工作的原因,&#34; SESSION&#34;表示临时,会话结束后会丢失任何会话设置。
接下来,我们需要将user @ host的密码设置为新的密码样式
为用户设置密码@ host = PASSWORD(&#39;密码&#39;);
这两个应该允许你的MySqlClient
答案 4 :(得分:1)
只是想添加@diangelisj的答案,并说问题的根源是服务器上安装的PhpMyAdmin版本。要使用最新的MySQL Data Connector类,您必须拥有最新的PhpMyAdmin(或出现问题)。在我的情况下,我有PhpMyAdmin 4.0.10.7并尝试使用MySQL数据连接器6.7.9,它给出了错误。
我做了什么:
添加.dll作为对应用程序的引用
的Presto!
答案 5 :(得分:1)
忘记应用SET old_password = 0,因为如果服务器配置为使用新密码,则如果您的应用程序不再访问,则没有理由更改服务器上的标志。调查您正在使用的连接器NET。
连接器6.5.4是使用old_password的正确版本,rencent版本正在使用新版本。
最佳做法是避免在机器上安装连接器,只需离开NET即可处理dll(如果已有)或者无论如何都要尝试查找MySQL.Data.DLL版本6.5.4.0(384千字节)< / p>
答案 6 :(得分:0)
我刚刚解决了我的问题:
1)使用mysql workbench连接到db(选择“use old auth”和“send pass in cleartext”
2)使用工作台,我运行了以下几次(因为它一直说'0行受影响'):(也将用户ID和密码更改为正确的东西)
SET SESSION old_passwords=0;
SET PASSWORD FOR userID=PASSWORD('password');
SET SESSION old_passwords=false;
SET PASSWORD FOR userID=PASSWORD('password');
3)现在回到你的应用程序,它应该运行...
至少我是这样做的。我正在使用IX mysql,他们确实在他们的服务器上使用旧的auth,所以你必须在你的最后做点什么......
答案 7 :(得分:0)
尽管我尝试了所有已提出的建议,但我还没有成功解决问题。 最后,事实证明,我的数据库所在的服务器自版本3.5.5以来没有更新phpMyAdmin,并且目前正在使用版本4.1.14,这是一个问题。 解决方案是将主机phpMyAdmin或您自己的mySQL更新回早期版本,以便继续使用远程数据库。 您可能需要这些知识才能解决已经出现的一些疑问。 :)
答案 8 :(得分:0)
今天我发现了同样的问题。我下载了Workbench。 Workbench有一些设置来连接数据库,如下所示: 1.选择标签SSL,在“使用SSL ”中选择选项“否”。 2.选择高级选项卡,选择使用ole认证协议。 在Workbench工作之后。 并按照tai1001'发布。 这就是我发现所有有用的步骤。