7

我有一个 C# 应用程序可以访问另一台计算机上的 MySQL 服务器。我正在尝试通过 IP 来实现。这是我的连接字符串:

server = "192.168.10.221";
database = "restaurantdb";
uid = "root";
password = "";
string connectionString;
connectionString = "SERVER=" + server + "; PORT = 3306 ;" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
mycon = new MySqlConnection(connectionString);

现在的想法是,我将通过两台计算机都连接到的 Internet 或 Wi-Fi 连接来连接它。然后,我将通过 C# 上编码的 SQL 字符串访问数据库。现在我也可以通过 LAN 网络连接它们,但我不知道如何。

我在我的代码中遇到了这个异常

{"Access denied for user 'root'@'Crave-PC.lan' (using password: NO)"}   System.Exception {MySql.Data.MySqlClient.MySqlException}

有什么想法可以通过网络访问服务器吗?

4

3 回答 3

6

问题出在 MySQL 服务器端,root 用户没有远程连接的权限。要授予 root 用户远程连接的权限,只需在 mysql 命令行上键入:

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'rootPass';

只需将“rootPass”更改为您当前的 root 密码,如果 root 没有密码 MySQL 不会让您连接,因此您必须为它定义一个。

附注:作为一种安全最佳实践,您应该定义一个不同于 root 的用户来从客户端应用程序访问您的 mysql 数据库。

希望能帮助到你,

于 2013-02-26T17:04:51.133 回答
2

该线程的一个补充:

在某些情况下,两台计算机连接到同一网络,尽管配置了源计算机并从客户端计算机为用户授予了权限,但上面定义的连接字符串可能仍然不起作用。

在这种情况下,请考虑(在进一步移动并对源计算机进行更严重的操作之前,例如修改 Mysql 配置文件等)“使用计算机名称作为服务器名称而不是 IP 地址”。

IE

  • 首先,如上所述授予用户权限,
  • 但不是上面建议的连接字符串,而是尝试以下连接字符串:

所以,连接字符串看起来像:

server = "pc-name-whateveritis";
database = "restaurantdb";
uid = "root";
password = "";
string connectionString;
connectionString = "SERVER=" + server + "; PORT = 3306 ;" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
mycon = new MySqlConnection(connectionString);

源计算机的名称在许多情况下可能有效,源计算机的 IP 地址返回错误。

祝你好运!

于 2014-06-11T11:42:16.747 回答
0

从 root 更改为不同的用户名并设置密码适用于远程访问,因为 root 只有在您位于 localhost 时才具有完全访问权限。在局域网上使用 IP 地址会出错,因此请使用计算机名称。

于 2015-08-26T21:00:04.313 回答