MySQL 与一个数据库连接失败,而与其他数据库连接失败

MySQL connection fails with one database and not with other

我在 mysql 上有 2 个数据库。 gege_sc001.

我可以通过我的 asp.net mvc 应用程序在本地访问这两个。

Web.config

 <connectionStrings>
<add name="GEContext_sc001" connectionString="server=localhost;port=3306;uid=root;pwd=***;database=ge_sc001" providerName="MySql.Data.MySqlClient" />
<add name="GEContext_sc002" connectionString="server=localhost;port=3306;uid=root;pwd=***;database=ge" providerName="MySql.Data.MySqlClient" />
<add name="GEContext" connectionString="server=localhost;port=3306;uid=root;pwd=***;database=ge" providerName="MySql.Data.MySqlClient" />

稍后,当我在 Web 服务器上部署我的应用程序并尝试从我的本地计算机访问它们时。我将 server=localhost 更改为我机器的对外 IP 地址。现在我只能访问一个ge。当我尝试访问第二个时,它给我错误。

Access denied for user 'root'@'' to database 'ge_sc001'

注意上面没有本地主机,即 'root'@'localhost'

显示资助

'将 . 上的所有权限授予 \'root\'@\'localhost\',密码为 \'*xxx\' 并授予选项' 'GRANT PROXY ON \'\'@\'\' 到 \'root\'@\'localhost\' WITH GRANT OPTION'

一些额外信息

由于asp.net mvc 在启动应用程序之前检查数据库连接,我在服务器上有一个默认数据库,它被定义为 GEContext。如您所见,数据库名称也有 ge。我根本没有更改此连接字符串,所以它仍然指向本地主机。

您缺少 GRANT 来自 的外部 IP ge_sc001

Connect from external IP

具体语法(到远程服务器上的运行)应该是

GRANT ALL ON ge_sc001.* TO 'root'@'<external_ip>';

其中 <external_ip> 是您的远程 客户端 外部 IP

更笼统的(我不喜欢,太宽泛)是:

GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '<password>' WITH GRANT OPTION;

--- 旁注 ---

mysql.user table 中有一个散乱的条目正在干扰。手动删除并使用 FLUSH PRIVILEGES 清除了