我在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" />
null
稍后,当我在web服务器上部署应用程序,并尝试从本地机器访问它们时。我将server=localhost更改为机器的面向外部的IP地址。现在我只能访问一个GE。当我尝试访问第二个时,它会给我错误。
拒绝用户“root”@“对数据库”GE_SC001“的访问
注意上面没有localhost,即'root'@'localhost'
显示授予
“授予...的所有特权。到\'root\'@\'localhost\'(由密码'*xxx\'标识),带有GRANT选项''GRANT proxyon\'\'@\'\'到\'root\'@\'localhost\',带有GRANT选项''
由于ASP.NET mvc在启动应用程序之前会检查数据库连接,所以我在服务器上有一个默认数据库,它被定义为gecontext。如您所见,数据库名称也是GE。我根本没有更改这个连接字符串,所以它仍然指向localhost。
您的外部IP中缺少GE_SC001
的Grant
从外部IP连接
(要在远程服务器上运行的)特定语法应为
GRANT ALL ON ge_sc001.* TO 'root'@'<external_ip>';
其中
是远程客户端的外部IP
一个更笼统的(我不喜欢,太宽泛了)应该是:
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '<password>' WITH GRANT OPTION;
---旁注---
mysql.user
表中有一个干扰项。手动删除该功能,并使用刷新特权
清除了问题