我在mysql上有2个数据库。 ge 和 ge_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 。当我尝试访问第二个时它会给我错误。
用户访问被拒绝&#39; root&#39; @&#39;&#39;到数据库&#39; ge_sc001&#39;
请注意,上面没有本地主机,即&#39; root&#39; @&#39; localhost&#39;
显示资助
&#39;在上授予所有权限。托管\&#39; @ \&#39; localhost \&#39;通过密码识别\&#39; * xxx \&#39; WITH GRANT OPTION&#39; &#39;授权代理\&#39; \&#39; @ \&#39; \&#39; TO \&#39; root \&#39; @ \&#39; localhost \&#39; WITH GRANT OPTION&#39;
由于asp.net mvc在启动应用程序之前检查数据库连接,因此我在服务器上有一个默认数据库,定义为GEContext。正如您所看到的那样,数据库名称也是ge。我根本没有更改此连接字符串,因此它仍然指向localhost。
答案 0 :(得分:1)
GRANT
ge_sc001
具体语法(在远程服务器上运行)应为
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
表中存在一个干扰的条目。手动删除并使用FLUSH PRIVILEGES
清除了